@dxos/plugin-thread 0.8.4-main.abd8ff62ef → 0.8.4-main.bc2380dfbc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/neutral/ChannelArticle-ACZD7YFT.mjs +28 -0
- package/dist/lib/neutral/ChannelArticle-ACZD7YFT.mjs.map +7 -0
- package/dist/lib/neutral/ChannelChat-6YTD5HWL.mjs +10 -0
- package/dist/lib/neutral/ThreadCompanion-NQWPS2H6.mjs +208 -0
- package/dist/lib/neutral/ThreadCompanion-NQWPS2H6.mjs.map +7 -0
- package/dist/lib/neutral/ThreadContainer-XYEPEOSD.mjs +61 -0
- package/dist/lib/neutral/ThreadContainer-XYEPEOSD.mjs.map +7 -0
- package/dist/lib/neutral/ThreadPlugin.mjs +80 -0
- package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
- package/dist/lib/neutral/ThreadPlugin.node.mjs +40 -0
- package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/ThreadPlugin.workerd.mjs +24 -0
- package/dist/lib/neutral/ThreadPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/ThreadSettings-5MKTDK3A.mjs +15 -0
- package/dist/lib/neutral/ThreadSettings-5MKTDK3A.mjs.map +7 -0
- package/dist/lib/{browser/add-message-LRVGIHDH.mjs → neutral/add-message-FBIROBEZ.mjs} +8 -10
- package/dist/lib/neutral/add-message-FBIROBEZ.mjs.map +7 -0
- package/dist/lib/neutral/app-graph-builder-7Q6MA6RT.mjs +120 -0
- package/dist/lib/neutral/app-graph-builder-7Q6MA6RT.mjs.map +7 -0
- package/dist/lib/{browser/append-channel-message-CO3M6FSA.mjs → neutral/append-channel-message-FTFAD3PK.mjs} +5 -5
- package/dist/lib/neutral/append-channel-message-FTFAD3PK.mjs.map +7 -0
- package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs +15 -0
- package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs.map +7 -0
- package/dist/lib/neutral/blueprints/index.mjs +8 -0
- package/dist/lib/neutral/capabilities/index.mjs +25 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/{browser/blueprints/index.mjs → neutral/chunk-5T5LPLBN.mjs} +4 -5
- package/dist/lib/neutral/chunk-5T5LPLBN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7GHUS3IX.mjs +20 -0
- package/dist/lib/neutral/chunk-7GHUS3IX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-D5LGFCUY.mjs +55 -0
- package/dist/lib/neutral/chunk-D5LGFCUY.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JLY4NVTA.mjs +38 -0
- package/dist/lib/neutral/chunk-JLY4NVTA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-KRXHIW4P.mjs +164 -0
- package/dist/lib/neutral/chunk-KRXHIW4P.mjs.map +7 -0
- package/dist/lib/{browser/chunk-TPNZ43NB.mjs → neutral/chunk-PE7IH7EL.mjs} +86 -73
- package/dist/lib/neutral/chunk-PE7IH7EL.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QFDT33VT.mjs +69 -0
- package/dist/lib/neutral/chunk-QFDT33VT.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QMLVLKE3.mjs +8 -0
- package/dist/lib/neutral/chunk-QMLVLKE3.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +539 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +15 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/{browser/create-BTGLHLBA.mjs → neutral/create-OAQJ6LXN.mjs} +7 -10
- package/dist/lib/neutral/create-OAQJ6LXN.mjs.map +7 -0
- package/dist/lib/{browser/create-channel-ZXKSLHGN.mjs → neutral/create-channel-3E4FJ662.mjs} +4 -4
- package/dist/lib/neutral/create-channel-3E4FJ662.mjs.map +7 -0
- package/dist/lib/neutral/create-object-HIEWSBZB.mjs +27 -0
- package/dist/lib/neutral/create-object-HIEWSBZB.mjs.map +7 -0
- package/dist/lib/{browser/create-proposals-AV5CREPV.mjs → neutral/create-proposals-GRYZXRMV.mjs} +4 -4
- package/dist/lib/neutral/create-proposals-GRYZXRMV.mjs.map +7 -0
- package/dist/lib/{browser/delete-GLYEP7NE.mjs → neutral/delete-HCCG5RVR.mjs} +7 -9
- package/dist/lib/neutral/delete-HCCG5RVR.mjs.map +7 -0
- package/dist/lib/{browser/delete-message-RQ72ZY5D.mjs → neutral/delete-message-DHFRACB4.mjs} +6 -7
- package/dist/lib/neutral/delete-message-DHFRACB4.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +10 -0
- package/dist/lib/neutral/index.mjs +28 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/markdown-BUORNCPG.mjs +83 -0
- package/dist/lib/neutral/markdown-BUORNCPG.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +10 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/{browser/on-create-space-SPE3QVFZ.mjs → neutral/on-create-space-OEBRKOAM.mjs} +5 -6
- package/dist/lib/neutral/on-create-space-OEBRKOAM.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
- package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-XY23GVZH.mjs +76 -0
- package/dist/lib/neutral/react-surface-XY23GVZH.mjs.map +7 -0
- package/dist/lib/{browser/restore-VX7FLZOZ.mjs → neutral/restore-P4ZLXLF7.mjs} +5 -5
- package/dist/lib/neutral/restore-P4ZLXLF7.mjs.map +7 -0
- package/dist/lib/{browser/restore-message-D65NSWUA.mjs → neutral/restore-message-AUBOP2DF.mjs} +5 -5
- package/dist/lib/neutral/restore-message-AUBOP2DF.mjs.map +7 -0
- package/dist/lib/{browser/select-AT4L7EBU.mjs → neutral/select-LIVAMBCE.mjs} +6 -8
- package/dist/lib/neutral/select-LIVAMBCE.mjs.map +7 -0
- package/dist/lib/neutral/settings-HK4EB6TF.mjs +30 -0
- package/dist/lib/neutral/settings-HK4EB6TF.mjs.map +7 -0
- package/dist/lib/neutral/state-UU7VEAKV.mjs +22 -0
- package/dist/lib/neutral/state-UU7VEAKV.mjs.map +7 -0
- package/dist/lib/neutral/testing/index.mjs +58 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/lib/{browser/toggle-resolved-JD3D4WBZ.mjs → neutral/toggle-resolved-RQBDQZSV.mjs} +5 -5
- package/dist/lib/neutral/toggle-resolved-RQBDQZSV.mjs.map +7 -0
- package/dist/lib/{browser → neutral}/translations.mjs +2 -2
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +12 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs +54 -0
- package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs.map +7 -0
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -1
- package/dist/types/src/ThreadPlugin.workerd.d.ts +4 -0
- package/dist/types/src/ThreadPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/capabilities/create-object.d.ts +11 -0
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +7 -6
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.d.ts +8 -1
- package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
- package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -1
- package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +0 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +13 -0
- package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -0
- package/dist/types/src/containers/{ChannelContainer/ChannelContainer.stories.d.ts → ChannelArticle/ChannelArticle.stories.d.ts} +4 -4
- package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelArticle/index.d.ts +2 -0
- package/dist/types/src/containers/{CallDebugPanel → ChannelArticle}/index.d.ts.map +1 -1
- package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts +4 -0
- package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts.map +1 -1
- package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +1 -3
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts +1 -1
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +0 -4
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +3 -5
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/add-message.d.ts +2 -2
- package/dist/types/src/operations/add-message.d.ts.map +1 -1
- package/dist/types/src/operations/append-channel-message.d.ts +2 -2
- package/dist/types/src/operations/append-channel-message.d.ts.map +1 -1
- package/dist/types/src/operations/create-channel.d.ts +2 -2
- package/dist/types/src/operations/create-channel.d.ts.map +1 -1
- package/dist/types/src/operations/create-proposals.d.ts +2 -2
- package/dist/types/src/operations/create-proposals.d.ts.map +1 -1
- package/dist/types/src/operations/create.d.ts +2 -2
- package/dist/types/src/operations/create.d.ts.map +1 -1
- package/dist/types/src/operations/delete-message.d.ts +2 -2
- package/dist/types/src/operations/delete-message.d.ts.map +1 -1
- package/dist/types/src/operations/delete.d.ts +2 -2
- package/dist/types/src/operations/delete.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts +0 -1
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/on-create-space.d.ts +2 -2
- package/dist/types/src/operations/on-create-space.d.ts.map +1 -1
- package/dist/types/src/operations/restore-message.d.ts +2 -2
- package/dist/types/src/operations/restore-message.d.ts.map +1 -1
- package/dist/types/src/operations/restore.d.ts +2 -2
- package/dist/types/src/operations/restore.d.ts.map +1 -1
- package/dist/types/src/operations/select.d.ts +2 -2
- package/dist/types/src/operations/select.d.ts.map +1 -1
- package/dist/types/src/operations/toggle-resolved.d.ts +2 -2
- package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -1
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/ThreadCapabilities.d.ts +13 -0
- package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
- package/dist/types/src/{operations/definitions.d.ts → types/ThreadOperation.d.ts} +1 -1
- package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +3 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +1 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +4 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +123 -99
- package/src/ThreadPlugin.node.ts +5 -50
- package/src/ThreadPlugin.test.ts +3 -3
- package/src/ThreadPlugin.tsx +6 -59
- package/src/ThreadPlugin.workerd.ts +20 -0
- package/src/blueprints/thread-blueprint.ts +1 -1
- package/src/capabilities/app-graph-builder.ts +18 -69
- package/src/capabilities/create-object.ts +29 -0
- package/src/capabilities/index.ts +1 -2
- package/src/capabilities/markdown.ts +1 -1
- package/src/capabilities/react-surface.tsx +4 -26
- package/src/capabilities/settings.ts +1 -3
- package/src/capabilities/undo-mappings.ts +1 -1
- package/src/components/Chat/Chat.tsx +52 -12
- package/src/components/CommentsPanel/CommentsPanel.stories.tsx +1 -1
- package/src/components/CommentsPanel/CommentsPanel.tsx +4 -4
- package/src/components/CommentsPanel/CommentsThread.tsx +2 -3
- package/src/components/MessagePanel/MessagePanel.tsx +7 -8
- package/src/components/ThreadSettings/ThreadSettings.tsx +0 -1
- package/src/components/index.ts +0 -1
- package/src/containers/{ChannelContainer/ChannelContainer.stories.tsx → ChannelArticle/ChannelArticle.stories.tsx} +10 -10
- package/src/containers/ChannelArticle/ChannelArticle.tsx +42 -0
- package/src/containers/ChannelArticle/index.ts +5 -0
- package/src/containers/ChannelChat/ChannelChat.tsx +12 -2
- package/src/containers/ThreadCompanion/ThreadCompanion.tsx +10 -12
- package/src/containers/index.ts +1 -3
- package/src/extensions/command.ts +1 -1
- package/src/extensions/threads.ts +2 -2
- package/src/hooks/analytics.ts +1 -1
- package/src/hooks/index.ts +0 -5
- package/src/index.ts +3 -10
- package/src/meta.ts +1 -2
- package/src/operations/add-message.ts +4 -4
- package/src/operations/append-channel-message.ts +20 -19
- package/src/operations/create-channel.ts +2 -2
- package/src/operations/create-proposals.ts +2 -2
- package/src/operations/create.ts +3 -3
- package/src/operations/delete-message.ts +4 -4
- package/src/operations/delete.ts +3 -3
- package/src/operations/index.ts +0 -2
- package/src/operations/on-create-space.ts +3 -3
- package/src/operations/restore-message.ts +3 -3
- package/src/operations/restore.ts +3 -3
- package/src/operations/select.ts +2 -2
- package/src/operations/toggle-resolved.ts +3 -3
- package/src/plugin.ts +11 -0
- package/src/translations.ts +2 -2
- package/src/types/ThreadCapabilities.ts +26 -0
- package/src/{operations/definitions.ts → types/ThreadOperation.ts} +5 -4
- package/src/types/index.ts +4 -1
- package/src/types/types.ts +0 -2
- package/src/util.ts +36 -4
- package/dist/lib/browser/add-message-LRVGIHDH.mjs.map +0 -7
- package/dist/lib/browser/append-channel-message-CO3M6FSA.mjs.map +0 -7
- package/dist/lib/browser/blueprints/index.mjs.map +0 -7
- package/dist/lib/browser/chunk-E4GG3NX2.mjs +0 -29
- package/dist/lib/browser/chunk-E4GG3NX2.mjs.map +0 -7
- package/dist/lib/browser/chunk-TPNZ43NB.mjs.map +0 -7
- package/dist/lib/browser/create-BTGLHLBA.mjs.map +0 -7
- package/dist/lib/browser/create-channel-ZXKSLHGN.mjs.map +0 -7
- package/dist/lib/browser/create-proposals-AV5CREPV.mjs.map +0 -7
- package/dist/lib/browser/delete-GLYEP7NE.mjs.map +0 -7
- package/dist/lib/browser/delete-message-RQ72ZY5D.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -1821
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/on-create-space-SPE3QVFZ.mjs.map +0 -7
- package/dist/lib/browser/operations/index.mjs +0 -13
- package/dist/lib/browser/operations/index.mjs.map +0 -7
- package/dist/lib/browser/restore-VX7FLZOZ.mjs.map +0 -7
- package/dist/lib/browser/restore-message-D65NSWUA.mjs.map +0 -7
- package/dist/lib/browser/select-AT4L7EBU.mjs.map +0 -7
- package/dist/lib/browser/toggle-resolved-JD3D4WBZ.mjs.map +0 -7
- package/dist/lib/browser/translations.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -10
- package/dist/lib/node-esm/add-message-4EAQ2ZPI.mjs +0 -90
- package/dist/lib/node-esm/add-message-4EAQ2ZPI.mjs.map +0 -7
- package/dist/lib/node-esm/append-channel-message-F7KGBSWP.mjs +0 -41
- package/dist/lib/node-esm/append-channel-message-F7KGBSWP.mjs.map +0 -7
- package/dist/lib/node-esm/blueprints/index.mjs +0 -38
- package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BVEZBGIY.mjs +0 -30
- package/dist/lib/node-esm/chunk-BVEZBGIY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-XKUMDYGR.mjs +0 -259
- package/dist/lib/node-esm/chunk-XKUMDYGR.mjs.map +0 -7
- package/dist/lib/node-esm/create-DEZFPN2Y.mjs +0 -56
- package/dist/lib/node-esm/create-DEZFPN2Y.mjs.map +0 -7
- package/dist/lib/node-esm/create-channel-6VHTC2OR.mjs +0 -20
- package/dist/lib/node-esm/create-channel-6VHTC2OR.mjs.map +0 -7
- package/dist/lib/node-esm/create-proposals-P5O2ICOL.mjs +0 -57
- package/dist/lib/node-esm/create-proposals-P5O2ICOL.mjs.map +0 -7
- package/dist/lib/node-esm/delete-QG45QLPY.mjs +0 -60
- package/dist/lib/node-esm/delete-QG45QLPY.mjs.map +0 -7
- package/dist/lib/node-esm/delete-message-PGNLB6TL.mjs +0 -56
- package/dist/lib/node-esm/delete-message-PGNLB6TL.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -1822
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/on-create-space-TFBSHWQ4.mjs +0 -25
- package/dist/lib/node-esm/on-create-space-TFBSHWQ4.mjs.map +0 -7
- package/dist/lib/node-esm/operations/index.mjs +0 -14
- package/dist/lib/node-esm/operations/index.mjs.map +0 -7
- package/dist/lib/node-esm/restore-E27OAIFJ.mjs +0 -33
- package/dist/lib/node-esm/restore-E27OAIFJ.mjs.map +0 -7
- package/dist/lib/node-esm/restore-message-J3CH6NGI.mjs +0 -34
- package/dist/lib/node-esm/restore-message-J3CH6NGI.mjs.map +0 -7
- package/dist/lib/node-esm/select-UU6Q2XAB.mjs +0 -27
- package/dist/lib/node-esm/select-UU6Q2XAB.mjs.map +0 -7
- package/dist/lib/node-esm/toggle-resolved-VS6NKXL3.mjs +0 -37
- package/dist/lib/node-esm/toggle-resolved-VS6NKXL3.mjs.map +0 -7
- package/dist/lib/node-esm/translations.mjs +0 -91
- package/dist/lib/node-esm/translations.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -11
- package/dist/types/src/calls/call-manager.d.ts +0 -87
- package/dist/types/src/calls/call-manager.d.ts.map +0 -1
- package/dist/types/src/calls/call-swarm-synchronizer.d.ts +0 -66
- package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +0 -1
- package/dist/types/src/calls/index.d.ts +0 -7
- package/dist/types/src/calls/index.d.ts.map +0 -1
- package/dist/types/src/calls/media-manager.d.ts +0 -60
- package/dist/types/src/calls/media-manager.d.ts.map +0 -1
- package/dist/types/src/calls/speaking-monitor.d.ts +0 -21
- package/dist/types/src/calls/speaking-monitor.d.ts.map +0 -1
- package/dist/types/src/calls/types.d.ts +0 -45
- package/dist/types/src/calls/types.d.ts.map +0 -1
- package/dist/types/src/calls/util/audio.d.ts +0 -6
- package/dist/types/src/calls/util/audio.d.ts.map +0 -1
- package/dist/types/src/calls/util/calls-service.d.ts +0 -77
- package/dist/types/src/calls/util/calls-service.d.ts.map +0 -1
- package/dist/types/src/calls/util/history-cache.d.ts +0 -11
- package/dist/types/src/calls/util/history-cache.d.ts.map +0 -1
- package/dist/types/src/calls/util/index.d.ts +0 -5
- package/dist/types/src/calls/util/index.d.ts.map +0 -1
- package/dist/types/src/calls/util/media.d.ts +0 -6
- package/dist/types/src/calls/util/media.d.ts.map +0 -1
- package/dist/types/src/calls/util/stub-media-streams.d.ts +0 -18
- package/dist/types/src/calls/util/stub-media-streams.d.ts.map +0 -1
- package/dist/types/src/calls/util/task-scheduling.d.ts +0 -17
- package/dist/types/src/calls/util/task-scheduling.d.ts.map +0 -1
- package/dist/types/src/calls-service.stories.d.ts +0 -23
- package/dist/types/src/calls-service.stories.d.ts.map +0 -1
- package/dist/types/src/capabilities/call-manager.d.ts +0 -6
- package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-root.d.ts +0 -9
- package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
- package/dist/types/src/components/Call/Call.d.ts +0 -45
- package/dist/types/src/components/Call/Call.d.ts.map +0 -1
- package/dist/types/src/components/Call/Toolbar.d.ts +0 -16
- package/dist/types/src/components/Call/Toolbar.d.ts.map +0 -1
- package/dist/types/src/components/Call/index.d.ts +0 -3
- package/dist/types/src/components/Call/index.d.ts.map +0 -1
- package/dist/types/src/components/Lobby/Lobby.d.ts +0 -36
- package/dist/types/src/components/Lobby/Lobby.d.ts.map +0 -1
- package/dist/types/src/components/Lobby/index.d.ts +0 -2
- package/dist/types/src/components/Lobby/index.d.ts.map +0 -1
- package/dist/types/src/components/Media/AudioStream.d.ts +0 -6
- package/dist/types/src/components/Media/AudioStream.d.ts.map +0 -1
- package/dist/types/src/components/Media/VideoObject.d.ts +0 -15
- package/dist/types/src/components/Media/VideoObject.d.ts.map +0 -1
- package/dist/types/src/components/Media/VideoObject.stories.d.ts +0 -22
- package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +0 -1
- package/dist/types/src/components/Media/index.d.ts +0 -3
- package/dist/types/src/components/Media/index.d.ts.map +0 -1
- package/dist/types/src/components/Participant/Participant.d.ts +0 -6
- package/dist/types/src/components/Participant/Participant.d.ts.map +0 -1
- package/dist/types/src/components/Participant/ParticipantGrid.d.ts +0 -11
- package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +0 -1
- package/dist/types/src/components/Participant/index.d.ts +0 -3
- package/dist/types/src/components/Participant/index.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts +0 -32
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +0 -178
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts +0 -21
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts +0 -12
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +0 -164
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/index.d.ts +0 -4
- package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +0 -1
- package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts +0 -15
- package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +0 -1
- package/dist/types/src/containers/CallDebugPanel/index.d.ts +0 -2
- package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts +0 -3
- package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +0 -1
- package/dist/types/src/containers/CallSidebar/index.d.ts +0 -2
- package/dist/types/src/containers/CallSidebar/index.d.ts.map +0 -1
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +0 -12
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +0 -1
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +0 -1
- package/dist/types/src/containers/ChannelContainer/index.d.ts +0 -2
- package/dist/types/src/containers/ChannelContainer/index.d.ts.map +0 -1
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +0 -2
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +0 -1
- package/dist/types/src/hooks/useDebugMode.d.ts +0 -2
- package/dist/types/src/hooks/useDebugMode.d.ts.map +0 -1
- package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +0 -2
- package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +0 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts +0 -3
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +0 -1
- package/dist/types/src/operations/definitions.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -25
- package/dist/types/src/types/capabilities.d.ts.map +0 -1
- package/src/calls/call-manager.ts +0 -270
- package/src/calls/call-swarm-synchronizer.ts +0 -350
- package/src/calls/index.ts +0 -10
- package/src/calls/media-manager.ts +0 -378
- package/src/calls/speaking-monitor.ts +0 -85
- package/src/calls/types.ts +0 -74
- package/src/calls/util/audio.ts +0 -58
- package/src/calls/util/calls-service.ts +0 -582
- package/src/calls/util/history-cache.ts +0 -27
- package/src/calls/util/index.ts +0 -8
- package/src/calls/util/media.ts +0 -52
- package/src/calls/util/stub-media-streams.ts +0 -129
- package/src/calls/util/task-scheduling.ts +0 -92
- package/src/calls-service.stories.tsx +0 -230
- package/src/capabilities/call-manager.ts +0 -27
- package/src/capabilities/react-root.tsx +0 -20
- package/src/components/Call/Call.tsx +0 -93
- package/src/components/Call/Toolbar.tsx +0 -199
- package/src/components/Call/index.ts +0 -6
- package/src/components/Lobby/Lobby.tsx +0 -123
- package/src/components/Lobby/index.ts +0 -5
- package/src/components/Media/AudioStream.tsx +0 -67
- package/src/components/Media/VideoObject.stories.tsx +0 -59
- package/src/components/Media/VideoObject.tsx +0 -58
- package/src/components/Media/index.ts +0 -6
- package/src/components/Participant/Participant.tsx +0 -77
- package/src/components/Participant/ParticipantGrid.tsx +0 -88
- package/src/components/Participant/index.ts +0 -6
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +0 -158
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +0 -341
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +0 -134
- package/src/components/ResponsiveGrid/ResponsivePanel.stories.tsx +0 -54
- package/src/components/ResponsiveGrid/ResponsivePanel.tsx +0 -31
- package/src/components/ResponsiveGrid/index.ts +0 -7
- package/src/containers/CallDebugPanel/CallDebugPanel.tsx +0 -173
- package/src/containers/CallDebugPanel/index.ts +0 -5
- package/src/containers/CallSidebar/CallSidebar.tsx +0 -18
- package/src/containers/CallSidebar/index.ts +0 -5
- package/src/containers/ChannelContainer/ChannelContainer.tsx +0 -223
- package/src/containers/ChannelContainer/index.ts +0 -5
- package/src/hooks/useBlackCanvasStreamTrack.tsx +0 -27
- package/src/hooks/useDebugMode.ts +0 -25
- package/src/hooks/useInaudibleAudioStreamTrack.tsx +0 -27
- package/src/hooks/useVideoStreamTrack.tsx +0 -36
- package/src/types/capabilities.ts +0 -37
- package/src/typings/peermetrics-webrtc-stats.d.ts +0 -46
- package/src/typings.d.ts +0 -8
- /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/ChannelChat-6YTD5HWL.mjs.map} +0 -0
- /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
- /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
- /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/index.ts", "../../../src/meta.ts", "../../../src/calls/call-manager.ts", "../../../src/calls/call-swarm-synchronizer.ts", "../../../src/calls/types.ts", "../../../src/calls/media-manager.ts", "../../../src/calls/speaking-monitor.ts", "../../../src/calls/util/audio.ts", "../../../src/calls/util/calls-service.ts", "../../../src/calls/util/history-cache.ts", "../../../src/calls/util/task-scheduling.ts", "../../../src/calls/util/media.ts", "../../../src/calls/util/stub-media-streams.ts", "../../../src/hooks/analytics.ts", "../../../src/hooks/useBlackCanvasStreamTrack.tsx", "../../../src/hooks/useDebugMode.ts", "../../../src/hooks/useInaudibleAudioStreamTrack.tsx", "../../../src/hooks/useStatus.ts", "../../../src/hooks/useVideoStreamTrack.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\n\nimport { meta } from './meta';\n\nexport const ThreadPlugin = Plugin.lazy(meta, () => import('#plugin'));\n\nexport * from './meta';\n\nexport { ThreadCapabilities } from './types';\nexport * from './calls';\n// TODO(wittjosiah): Hooks should not be exported from the plugin package at all.\n// Either refactor callers to not need them or factor them out to a shared package.\nexport * from './hooks';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\n// TODO(wittjosiah): Needs screenshots.\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.thread',\n name: 'Chat',\n description: trim`\n Multi-modal communication platform supporting text chat, voice, and video conferencing.\n Create threaded conversations and add contextual comments directly on any workspace object.\n `,\n icon: 'ph--video-conference--regular',\n iconHue: 'rose',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n};\n\nexport const THREAD_ITEM = `${meta.id}.item`;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, type Registry } from '@effect-atom/atom-react';\n\nimport { Event, synchronized } from '@dxos/async';\nimport { type Client } from '@dxos/client';\nimport { Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { type Tracks } from '@dxos/protocols/proto/dxos/edge/calls';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type CallState, CallSwarmSynchronizer } from './call-swarm-synchronizer';\nimport { MediaManager, type MediaState } from './media-manager';\nimport { type ActivityState, CALLS_URL, type EncodedTrackName, TrackNameCodec, type UserState } from './types';\n\nexport type GlobalState = {\n call: CallState;\n media: MediaState;\n};\n\n/**\n * Top level manager for call state.\n */\nexport class CallManager extends Resource {\n public readonly callStateUpdated = new Event<CallState>();\n // TODO(wittjosiah): Consolidate isSpeaking into the MediaState type.\n public readonly mediaStateUpdated = new Event<[MediaState, boolean]>();\n public readonly left = new Event<string>();\n\n /**\n * Atom-based state. Updated via `_updateState()`.\n * CAUTION: Do not change directly.\n */\n private readonly _stateAtom = Atom.make<GlobalState>({\n call: {},\n media: { pulledAudioTracks: {}, pulledVideoStreams: {} },\n });\n\n // Derived atoms for reactive subscriptions.\n private readonly _roomIdAtom = Atom.make((get) => get(this._stateAtom).call.roomId);\n private readonly _raisedHandAtom = Atom.make((get) => get(this._stateAtom).call.raisedHand ?? false);\n private readonly _speakingAtom = Atom.make((get) => get(this._stateAtom).call.speaking ?? false);\n private readonly _joinedAtom = Atom.make((get) => get(this._stateAtom).call.joined ?? false);\n private readonly _selfAtom = Atom.make((get) => get(this._stateAtom).call.self ?? {});\n private readonly _tracksAtom = Atom.make((get) => get(this._stateAtom).call.tracks ?? {});\n private readonly _usersAtom = Atom.make((get) => get(this._stateAtom).call.users ?? []);\n private readonly _mediaAtom = Atom.make((get) => get(this._stateAtom).media);\n private readonly _audioTracksToPlayAtom = Atom.make((get) => {\n const state = get(this._stateAtom);\n return (state.call.users ?? [])\n .map((user: UserState) => (user.tracks?.audioEnabled ? user.tracks?.audio : undefined))\n .filter(isNonNullable)\n .map((track: string) => state.media.pulledAudioTracks[track as EncodedTrackName]?.track)\n .filter(isNonNullable);\n });\n private readonly _videoStreamAtomFamily = Atom.family<EncodedTrackName, Atom.Atom<MediaStream | undefined>>((name) =>\n Atom.make((get) => get(this._stateAtom).media.pulledVideoStreams[name]?.stream),\n );\n private readonly _activityAtomFamily = Atom.family<string, Atom.Atom<ActivityState | undefined>>((key) =>\n Atom.make((get) => get(this._stateAtom).call.activities?.[key]),\n );\n\n private readonly _swarmSynchronizer: CallSwarmSynchronizer;\n private readonly _mediaManager: MediaManager;\n\n //\n // Derived atoms for reactive UI subscriptions.\n //\n\n /** Derived atom for roomId. */\n get roomIdAtom(): Atom.Atom<string | undefined> {\n return this._roomIdAtom;\n }\n\n /** Derived atom for raisedHand. */\n get raisedHandAtom(): Atom.Atom<boolean> {\n return this._raisedHandAtom;\n }\n\n /** Derived atom for speaking. */\n get speakingAtom(): Atom.Atom<boolean> {\n return this._speakingAtom;\n }\n\n /** Derived atom for joined. */\n get joinedAtom(): Atom.Atom<boolean> {\n return this._joinedAtom;\n }\n\n /** Derived atom for self. */\n get selfAtom(): Atom.Atom<UserState> {\n return this._selfAtom;\n }\n\n /** Derived atom for tracks. */\n get tracksAtom(): Atom.Atom<Tracks> {\n return this._tracksAtom;\n }\n\n /** Derived atom for users. */\n get usersAtom(): Atom.Atom<UserState[]> {\n return this._usersAtom;\n }\n\n /** Derived atom for media. */\n get mediaAtom(): Atom.Atom<MediaState> {\n return this._mediaAtom;\n }\n\n /** Derived atom for audioTracksToPlay. */\n get audioTracksToPlayAtom(): Atom.Atom<MediaStreamTrack[]> {\n return this._audioTracksToPlayAtom;\n }\n\n /** Returns the full state atom for reactive subscriptions. */\n get stateAtom(): Atom.Atom<GlobalState> {\n return this._stateAtom;\n }\n\n /** Returns a derived atom for a video stream by name. */\n videoStreamAtom(name: EncodedTrackName): Atom.Atom<MediaStream | undefined> {\n return this._videoStreamAtomFamily(name);\n }\n\n /** Returns a derived atom for an activity by key. */\n activityAtom(key: string): Atom.Atom<ActivityState | undefined> {\n return this._activityAtomFamily(key);\n }\n\n setRoomId(roomId: string): void {\n this._swarmSynchronizer._setRoomId(roomId);\n }\n\n setSpeaking(speaking: boolean): void {\n this._swarmSynchronizer.setSpeaking(speaking);\n }\n\n setRaisedHand(raisedHand: boolean): void {\n this._swarmSynchronizer.setRaisedHand(raisedHand);\n }\n\n setActivity(key: string, payload: ActivityState['payload']): void {\n this._swarmSynchronizer.setActivity(key, payload);\n }\n\n turnAudioOn(): Promise<void> {\n return this._mediaManager.turnAudioOn();\n }\n\n turnAudioOff(): Promise<void> {\n return this._mediaManager.turnAudioOff();\n }\n\n turnVideoOn(): Promise<void> {\n return this._mediaManager.turnVideoOn();\n }\n\n turnVideoOff(): Promise<void> {\n return this._mediaManager.turnVideoOff();\n }\n\n turnScreenshareOn(): Promise<void> {\n return this._mediaManager.turnScreenshareOn();\n }\n\n turnScreenshareOff(): Promise<void> {\n return this._mediaManager.turnScreenshareOff();\n }\n\n // TODO(burdon): Can this be mocked?\n constructor(\n private readonly _client: Client,\n private readonly _registry: Registry.Registry,\n ) {\n super();\n this._client.config.getOrThrow('runtime.services.edge.url');\n const networkService = this._client.services.services.NetworkService;\n invariant(networkService, 'network service not found');\n this._swarmSynchronizer = new CallSwarmSynchronizer({ networkService });\n this._mediaManager = new MediaManager();\n }\n\n protected override async _open(): Promise<void> {\n await this._mediaManager.open();\n await this._swarmSynchronizer.open();\n const subscription = this._client.halo.identity.subscribe((identity) => {\n if (identity) {\n this._swarmSynchronizer._setIdentity(identity);\n }\n if (this._client.halo.device) {\n this._swarmSynchronizer._setDevice(this._client.halo.device);\n }\n });\n this._ctx.onDispose(() => subscription.unsubscribe());\n\n this._swarmSynchronizer.stateUpdated.on(this._ctx, (state) => this._onCallStateUpdated(state));\n this._mediaManager.stateUpdated.on(this._ctx, (state) => this._onMediaStateUpdated(state));\n }\n\n protected override async _close(): Promise<void> {\n await this._swarmSynchronizer.leave();\n await this._swarmSynchronizer.close();\n await this._mediaManager.close();\n }\n\n async peek(roomId: string): Promise<number> {\n const peers = await this._swarmSynchronizer.querySwarm(roomId);\n return peers.length;\n }\n\n // TODO(mykola): Reconcile with _swarmSynchronizer.state.joined.\n @synchronized\n async join(): Promise<void> {\n this._swarmSynchronizer.setJoined(true);\n await this._swarmSynchronizer.join();\n await this._mediaManager.join({\n iceServers: this._client.config.get('runtime.services.ice'),\n apiBase: `${CALLS_URL}/api/calls`,\n });\n }\n\n @synchronized\n async leave(): Promise<void> {\n this._swarmSynchronizer.setJoined(false);\n await this._swarmSynchronizer.leave();\n await this._mediaManager.leave();\n const roomId = this._registry.get(this._roomIdAtom);\n roomId && this.left.emit(roomId);\n }\n\n private _onCallStateUpdated(state: CallState): void {\n const tracksToPull = state.users\n ?.filter((user) => user.joined && user.id !== state.self!.id)\n ?.flatMap((user) => [user.tracks?.video, user.tracks?.audio, user.tracks?.screenshare])\n .filter(isNonNullable);\n this._mediaManager._schedulePullTracks(tracksToPull as EncodedTrackName[]);\n\n this.callStateUpdated.emit(state);\n this._updateState();\n }\n\n private _onMediaStateUpdated(state: MediaState): void {\n this._swarmSynchronizer.setTracks({\n video: state.pushedVideoTrack ? TrackNameCodec.encode(state.pushedVideoTrack) : undefined,\n audio: state.pushedAudioTrack ? TrackNameCodec.encode(state.pushedAudioTrack) : undefined,\n screenshare: state.pushedScreenshareTrack ? TrackNameCodec.encode(state.pushedScreenshareTrack) : undefined,\n videoEnabled: state.videoEnabled,\n audioEnabled: state.audioEnabled,\n screenshareEnabled: state.screenshareEnabled,\n });\n\n const isSpeaking = this._mediaManager.isSpeaking ?? false;\n this._swarmSynchronizer.setSpeaking(isSpeaking);\n\n this.mediaStateUpdated.emit([state, isSpeaking]);\n this._updateState();\n }\n\n /**\n * Only this method is allowed to change state.\n */\n private _updateState(): void {\n this._registry.set(this._stateAtom, {\n call: this._swarmSynchronizer._getState(),\n media: this._mediaManager._getState(),\n });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport md5Hex from 'md5-hex';\n\nimport { DeferredTask, Event, scheduleTaskInterval, synchronized } from '@dxos/async';\nimport { type Identity } from '@dxos/client/halo';\nimport { Context, Resource } from '@dxos/context';\nimport { generateName } from '@dxos/display-name';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { buf } from '@dxos/protocols/buf';\nimport { ActivitySchema } from '@dxos/protocols/buf/dxos/edge/calls_pb';\nimport { type Device, type NetworkService } from '@dxos/protocols/proto/dxos/client/services';\nimport { ConnectionState, type SwarmResponse } from '@dxos/protocols/proto/dxos/edge/messenger';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type ActivityState, type UserState, codec } from './types';\n\nexport type CallState = {\n /**\n * Room id.\n */\n roomId?: string;\n\n /**\n * All users states in the swarm.\n */\n users?: UserState[];\n\n /**\n * Self state inside swarm.\n */\n self?: UserState;\n\n /**\n * Swarm synchronized CRDT transcription. Last write wins.\n */\n activities?: Record<string, ActivityState>;\n\n raisedHand?: boolean;\n speaking?: boolean;\n joined?: boolean;\n\n /**\n * Tracks pushed by self to calls service.\n */\n tracks?: UserState['tracks'];\n};\n\nexport type CallSwarmSynchronizerProps = { networkService: NetworkService };\n\n/**\n * Period for peer to reconnect to the call swarm gracefully if connection was lost abruptly.\n */\nconst DISCONNECTED_ABRUPT_TIMEOUT = 10_000; // [ms]\n\n/**\n * Sends and receives state to/from Swarm network.\n */\nexport class CallSwarmSynchronizer extends Resource {\n public readonly stateUpdated = new Event<CallState>();\n\n private readonly _state: CallState = { activities: {} };\n private readonly _networkService: NetworkService;\n private _lastSwarmEvent?: SwarmResponse = undefined;\n private _reconcileSwarmStateTask?: DeferredTask = undefined;\n\n private _identityKey?: string = undefined;\n private _deviceKey?: string = undefined;\n private _displayName?: string = undefined;\n\n private _swarmCtx?: Context = undefined;\n\n private _sendStateTask?: DeferredTask = undefined;\n\n constructor({ networkService }: CallSwarmSynchronizerProps) {\n super();\n this._networkService = networkService;\n }\n\n /**\n * @internal\n */\n _getState(): CallState {\n return this._state;\n }\n\n setRaisedHand(raisedHand: boolean): void {\n if (this._state.raisedHand === raisedHand) {\n return;\n }\n\n this._state.raisedHand = raisedHand;\n this._notifyAndSchedule();\n }\n\n setSpeaking(speaking: boolean): void {\n if (this._state.speaking === speaking) {\n return;\n }\n\n this._state.speaking = speaking;\n this._notifyAndSchedule();\n }\n\n setJoined(joined: boolean): void {\n if (this._state.joined === joined) {\n return;\n }\n\n this._state.joined = joined;\n this._notifyAndSchedule();\n }\n\n setTracks(tracks: UserState['tracks']): void {\n this._state.tracks = { ...this._state.tracks, ...tracks };\n this._notifyAndSchedule();\n }\n\n setActivity(key: string, payload: ActivityState['payload']): void {\n const lamportTimestamp = LamportTimestampCrdt.increment(\n this._state.activities?.[key]?.lamportTimestamp ?? { id: this._deviceKey },\n );\n this._state.activities![key] = { lamportTimestamp, payload };\n\n this._notifyAndSchedule();\n }\n\n /**\n * @internal\n */\n _setIdentity(identity: Identity): void {\n this._identityKey = identity.identityKey.toHex();\n this._displayName = identity.profile?.displayName ?? generateName(identity.identityKey.toHex());\n }\n\n /**\n * @internal\n */\n _setDevice(device: Device): void {\n this._deviceKey = device.deviceKey.toHex();\n }\n\n /**\n * @internal\n */\n _setRoomId(roomId?: string): void {\n if (this._swarmCtx) {\n log.verbose('joined to a different room', { roomId });\n return;\n }\n\n this._state.roomId = roomId;\n }\n\n protected override async _open(): Promise<void> {\n this._sendStateTask = new DeferredTask(this._ctx, async () => {\n await this._sendState();\n });\n\n this._reconcileSwarmStateTask = new DeferredTask(this._ctx, async () => {\n await this._reconcileSwarmState();\n });\n }\n\n protected override async _close(): Promise<void> {\n this._sendStateTask = undefined;\n this._reconcileSwarmStateTask = undefined;\n }\n\n @synchronized\n async join(): Promise<void> {\n invariant(this._state.roomId);\n invariant(!this._swarmCtx, 'Already joined');\n\n this._swarmCtx = new Context();\n const topic = getTopic(this._state.roomId);\n log('joining swarm', { topic, peer: { identityKey: this._identityKey, peerKey: this._deviceKey } });\n const stream = this._networkService.subscribeSwarmState({ topic });\n stream.subscribe((event) => this._processSwarmEvent(event));\n\n const cleanup = () => {\n void stream.close();\n if (topic && this._identityKey && this._deviceKey) {\n log('leaving swarm', { topic, peer: { identityKey: this._identityKey, peerKey: this._deviceKey } });\n void this._networkService\n .leaveSwarm({\n topic,\n peer: { identityKey: this._identityKey, peerKey: this._deviceKey },\n })\n .catch((err) => log.catch(err));\n }\n window.removeEventListener('beforeunload', cleanup);\n };\n window.addEventListener('beforeunload', cleanup);\n this._swarmCtx.onDispose(cleanup);\n\n this._notifyAndSchedule();\n }\n\n @synchronized\n async leave(): Promise<void> {\n if (!this._swarmCtx) {\n return;\n }\n\n await this._swarmCtx.dispose();\n this._swarmCtx = undefined;\n\n this._state.users = undefined;\n this._state.self = undefined;\n }\n\n async querySwarm(roomId: string) {\n const topic = getTopic(roomId);\n const swarm = await this._networkService.querySwarm({ topic });\n return swarm.peers ?? [];\n }\n\n /**\n * Notify and schedule send state task.\n */\n private _notifyAndSchedule(): void {\n this.stateUpdated.emit(this._state);\n if (this._state.joined) {\n this._sendStateTask?.schedule();\n }\n }\n\n private async _sendState(): Promise<void> {\n if (!this._state.roomId || !this._identityKey || !this._deviceKey || !this._state.joined) {\n return;\n }\n\n const state: UserState = {\n ...this._state,\n id: this._deviceKey,\n name: this._displayName,\n activities: this._state.activities\n ? Object.fromEntries(\n Object.entries(this._state.activities).map(([key, activity]) => [\n key,\n buf.create(ActivitySchema, activity),\n ]),\n )\n : {},\n };\n\n await this._networkService.joinSwarm({\n topic: getTopic(this._state.roomId),\n peer: {\n identityKey: this._identityKey,\n peerKey: this._deviceKey,\n state: codec.encode(state),\n },\n });\n }\n\n private _processSwarmEvent(swarmEvent: SwarmResponse): void {\n if (!this._state.joined) {\n return;\n }\n\n this._lastSwarmEvent = swarmEvent;\n this._reconcileSwarmStateTask!.schedule();\n }\n\n private async _reconcileSwarmState(): Promise<void> {\n const swarmEvent = this._lastSwarmEvent;\n invariant(swarmEvent);\n // We include inactive peers that were disconnected abruptly and have not yet reconnected to not drop them from call.\n // Websocket connection could be unstable and we include graceful period for peers to reconnect.\n const peers = [\n ...(swarmEvent.peers ?? []),\n ...(swarmEvent.inactivePeers ?? []).filter(\n ({ disconnected, connectionState }) =>\n connectionState === ConnectionState.DISCONNECTED_ABRUPT &&\n disconnected &&\n disconnected > Date.now() - DISCONNECTED_ABRUPT_TIMEOUT,\n ),\n ].sort((peer1, peer2) => peer1.peerKey.localeCompare(peer2.peerKey));\n const users = peers\n .map((peer) => {\n try {\n return codec.decode(peer.state!);\n } catch (error) {\n log.error('error decoding peer state', { error, peer });\n return undefined;\n }\n })\n .filter(isNonNullable);\n this._state.users = users;\n this._state.self = users.find((user) => user.id === this._deviceKey);\n log('reconciling swarm state', { users });\n if (users.length === 0) {\n return;\n }\n\n const activityKeys = new Set<string>(users.flatMap((user) => Object.keys(user.activities)));\n [...activityKeys].forEach((key) => {\n const activities = users.map((user) => user.activities?.[key]).filter(isNonNullable);\n const lastActivity = LamportTimestampCrdt.getLastState(activities);\n if (\n lastActivity &&\n lastActivity.lamportTimestamp!.version! > (this._state.activities![key]?.lamportTimestamp?.version ?? 0)\n ) {\n this._state.activities![key] = lastActivity;\n }\n });\n this.stateUpdated.emit(this._state);\n\n // Schedule next reconcile if there are inactive peer to drop them after timeout.\n if (peers.some((peer) => peer.connectionState !== ConnectionState.CONNECTED)) {\n scheduleTaskInterval(\n this._ctx,\n async () => this._reconcileSwarmStateTask!.schedule(),\n Math.min(DISCONNECTED_ABRUPT_TIMEOUT / 2, 1000),\n );\n }\n }\n}\n\ntype LamportTimestamp = ActivityState['lamportTimestamp'];\n\n// TODO(mykola): Factor out.\nclass LamportTimestampCrdt {\n static getLastState<T extends { lamportTimestamp?: LamportTimestamp }>(states: T[]): T | undefined {\n const maxTimestamp = Math.max(...states.map((state) => state.lamportTimestamp?.version ?? 0));\n const sortedStates = states\n .filter(\n (state) =>\n state.lamportTimestamp && state.lamportTimestamp.version === maxTimestamp && state.lamportTimestamp.id,\n )\n .sort((a, b) => a.lamportTimestamp!.id!.localeCompare(b.lamportTimestamp!.id!));\n return sortedStates[0];\n }\n\n static increment(timestamp: LamportTimestamp): LamportTimestamp {\n return {\n ...(timestamp ?? {}),\n version: (timestamp?.version ?? 0) + 1,\n };\n }\n}\n\n// TODO(mykola): Delete once we refactor swarm to accept string as topic.\nconst getTopic = (roomId: string): PublicKey => PublicKey.fromHex(md5Hex(roomId));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { buf } from '@dxos/protocols/buf';\nimport {\n type ActivitySchema,\n type UserState as UserStateProto,\n UserStateSchema,\n} from '@dxos/protocols/buf/dxos/edge/calls_pb';\n\n/**\n * Endpoint to the calls service.\n */\nexport const CALLS_URL = 'https://calls-service.dxos.workers.dev';\n\nexport type UserState = buf.MessageInitShape<typeof UserStateSchema>;\n\nexport type ActivityState = buf.MessageInitShape<typeof ActivitySchema>;\n\nexport const codec = {\n encode: (message: UserState): Uint8Array => {\n return buf.toBinary(UserStateSchema, buf.create(UserStateSchema, message));\n },\n decode: (message: Uint8Array): UserStateProto => {\n return buf.fromBinary(UserStateSchema, message);\n },\n};\n\nexport type TrackObject = {\n location?: 'local' | 'remote';\n trackName?: string;\n sessionId?: string;\n mid?: string | null;\n};\n\nexport type SessionDescription = {\n type: 'offer' | 'answer';\n sdp: string;\n};\n\nexport interface ErrorResponse {\n errorCode?: string;\n errorDescription?: string;\n}\n\nexport interface SessionResponse extends ErrorResponse {\n sessionId: string;\n sessionDescription: SessionDescription;\n}\n\nexport interface TracksResponse extends ErrorResponse {\n sessionDescription: SessionDescription;\n requiresImmediateRenegotiation: boolean;\n tracks?: (TrackObject & ErrorResponse)[];\n}\n\nexport interface RenegotiationResponse extends ErrorResponse {}\n\nexport type EncodedTrackName = string & { __brand: 'EncodedTrackName' };\n\nexport const TrackNameCodec = {\n encode: (trackData: TrackObject): EncodedTrackName => {\n invariant(trackData.sessionId);\n invariant(trackData.trackName);\n invariant(trackData.mid);\n return (trackData.sessionId + '/' + trackData.trackName + '/' + trackData.mid) as EncodedTrackName;\n },\n decode: (name: EncodedTrackName): TrackObject => {\n const [sessionId, trackName, mid] = name.split('/');\n return { sessionId, trackName, location: 'remote', mid };\n },\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { DeferredTask, Event, sleep, synchronized } from '@dxos/async';\nimport { type Context, Resource, cancelWithContext } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { SpeakingMonitor } from './speaking-monitor';\nimport { type EncodedTrackName, TrackNameCodec, type TrackObject } from './types';\nimport {\n type CallsServiceConfig,\n CallsServicePeer,\n createBlackCanvasStreamTrack,\n createInaudibleAudioStreamTrack,\n getScreenshare,\n getUserMediaTrack,\n} from './util';\n\nexport type MediaState = {\n audioDeviceId?: string;\n audioEnabled?: boolean;\n audioTrack?: MediaStreamTrack;\n\n videoDeviceId?: string;\n videoEnabled?: boolean;\n videoTrack?: MediaStreamTrack;\n videoStream?: MediaStream;\n\n screenshareEnabled?: boolean;\n screenshareTrack?: MediaStreamTrack;\n screenshareVideoStream?: MediaStream;\n\n pushedVideoTrack?: TrackObject;\n pushedAudioTrack?: TrackObject;\n pushedScreenshareTrack?: TrackObject;\n peer?: CallsServicePeer;\n\n pulledAudioTracks: Record<EncodedTrackName, { track: MediaStreamTrack; ctx: Context }>;\n /**\n * Includes video feeds and screenshare feeds of other participants.\n */\n pulledVideoStreams: Record<EncodedTrackName, { stream: MediaStream; ctx: Context }>;\n};\n\n// TOOD(burdon): Hard coded.\nconst VIDEO_WIDTH = 1280;\nconst VIDEO_HEIGHT = 720;\nconst MAX_WEB_CAM_FRAMERATE = 24;\nconst MAX_WEB_CAM_BITRATE = 120_0000;\nconst RETRY_INTERVAL = 100;\n\nexport type MediaManagerProps = {\n serviceConfig: CallsServiceConfig;\n};\n\nconst USE_INAUDIBLE_AUDIO = true;\n\nexport class MediaManager extends Resource {\n public readonly stateUpdated = new Event<MediaState>();\n\n private readonly _state: MediaState = {\n pulledVideoStreams: {},\n pulledAudioTracks: {},\n };\n\n private _speakingMonitor?: SpeakingMonitor = undefined;\n private _trackToReconcile: EncodedTrackName[] = [];\n private _blackCanvasStreamTrack?: MediaStreamTrack = undefined;\n private _inaudibleAudioStreamTrack?: MediaStreamTrack = undefined;\n private _pushTracksTask?: DeferredTask = undefined;\n private _pullTracksTask?: DeferredTask = undefined;\n\n get isSpeaking() {\n return this._speakingMonitor?.isSpeaking;\n }\n\n /**\n * @internal\n */\n _getState(): MediaState {\n return this._state;\n }\n\n protected override async _open(): Promise<void> {\n this._blackCanvasStreamTrack = await createBlackCanvasStreamTrack({\n ctx: this._ctx,\n width: VIDEO_WIDTH,\n height: VIDEO_HEIGHT,\n });\n\n this._state.videoTrack = this._blackCanvasStreamTrack;\n this._state.videoStream = new MediaStream();\n this._state.videoStream.addTrack(this._state.videoTrack);\n\n if (USE_INAUDIBLE_AUDIO) {\n this._inaudibleAudioStreamTrack = await createInaudibleAudioStreamTrack({ ctx: this._ctx });\n this._state.audioTrack = this._inaudibleAudioStreamTrack;\n }\n\n this._pushTracksTask = new DeferredTask(this._ctx, async () => {\n await this._pushTracks();\n });\n this._pullTracksTask = new DeferredTask(this._ctx, async () => {\n await this._reconcilePulledMedia();\n });\n }\n\n protected override async _close(): Promise<void> {\n void this._speakingMonitor?.close();\n this._state.videoTrack && this._state.videoStream?.removeTrack(this._state.videoTrack);\n this._state.audioTrack?.stop();\n this._state.videoTrack?.stop();\n this._state.screenshareTrack?.stop();\n this._pushTracksTask = undefined;\n this._pullTracksTask = undefined;\n }\n\n @synchronized\n async join(serviceConfig: CallsServiceConfig): Promise<void> {\n this._state.peer = new CallsServicePeer(serviceConfig);\n await this._state.peer!.open();\n this._pushTracksTask!.schedule();\n }\n\n @synchronized\n async leave(): Promise<void> {\n await Promise.all(Object.values(this._state.pulledAudioTracks).map(({ ctx }) => ctx.dispose()));\n await Promise.all(Object.values(this._state.pulledVideoStreams).map(({ ctx }) => ctx.dispose()));\n this._trackToReconcile = [];\n await this._state.peer?.close();\n this._state.peer = undefined;\n this._state.pushedVideoTrack = undefined;\n this._state.pushedAudioTrack = undefined;\n this._state.pushedScreenshareTrack = undefined;\n this._state.pulledAudioTracks = {};\n this._state.pulledVideoStreams = {};\n }\n\n async turnVideoOn(): Promise<void> {\n this._state.videoStream!.removeTrack(this._state.videoTrack!);\n this._state.videoTrack = await getUserMediaTrack('videoinput', { width: VIDEO_WIDTH, height: VIDEO_HEIGHT });\n this._state.videoStream!.addTrack(this._state.videoTrack);\n\n this._state.videoEnabled = true;\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n async turnVideoOff(): Promise<void> {\n if (this._state.videoTrack !== this._blackCanvasStreamTrack) {\n this._state.videoStream!.removeTrack(this._state.videoTrack!);\n this._state.videoTrack?.stop();\n this._state.videoTrack = this._blackCanvasStreamTrack;\n this._state.videoStream!.addTrack(this._state.videoTrack!);\n }\n\n this._state.videoEnabled = false;\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n // TODO(mykola): Change to `setAudioEnabled(enabled: boolean)`.\n async turnAudioOn(): Promise<void> {\n void this._speakingMonitor?.close();\n this._state.audioEnabled = true;\n this._state.audioTrack = await getUserMediaTrack('audioinput', {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n sampleRate: 16_000,\n });\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n this._speakingMonitor = new SpeakingMonitor(this._state.audioTrack!);\n this._speakingMonitor.speakingChanged.on(this._ctx, () => this.stateUpdated.emit(this._state));\n void this._speakingMonitor.open();\n }\n\n async turnAudioOff(): Promise<void> {\n void this._speakingMonitor?.close();\n this._speakingMonitor = undefined;\n this._state.audioEnabled = false;\n if (USE_INAUDIBLE_AUDIO && this._state.audioTrack !== this._inaudibleAudioStreamTrack) {\n this._state.audioTrack?.stop();\n this._state.audioTrack = this._inaudibleAudioStreamTrack;\n } else {\n this._state.audioTrack?.stop();\n this._state.audioTrack = undefined;\n }\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n async turnScreenshareOn(): Promise<void> {\n const ms = await getScreenshare({ contentHint: 'text' });\n this._state.screenshareVideoStream = ms;\n this._state.screenshareTrack = ms.getVideoTracks()[0];\n this._state.screenshareEnabled = true;\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n async turnScreenshareOff(): Promise<void> {\n this._state.screenshareEnabled = false;\n this._state.screenshareTrack?.stop();\n this._state.screenshareTrack = undefined;\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n /**\n * @internal\n */\n _schedulePullTracks(tracks?: EncodedTrackName[]): void {\n if (\n !tracks ||\n (this._trackToReconcile.every((name) => tracks.includes(name)) && this._trackToReconcile.length === tracks.length)\n ) {\n return;\n }\n\n this._trackToReconcile = tracks;\n this._pullTracksTask!.schedule();\n }\n\n private async _reconcilePulledMedia(): Promise<void> {\n log('reconciling tracks');\n // TODO(mykola): Currently cloudflare fails if you try to pull track immediately after pushing it.\n // Add retry logic, remove sleep.\n // Wait for cloudflare to process the track.\n await cancelWithContext(this._ctx, sleep(800));\n const trackNames = this._trackToReconcile;\n const tracksToPull = trackNames.filter(\n (name) => !this._state.pulledAudioTracks[name] && !this._state.pulledVideoStreams[name],\n );\n\n const audioTracksToClose = Object.entries(this._state.pulledAudioTracks).filter(\n ([key]) => !trackNames.some((name) => name === key),\n );\n\n const videoStreamsToClose = Object.entries(this._state.pulledVideoStreams).filter(\n ([key]) => !trackNames.some((name) => name === key),\n );\n\n log('reconciling tracks', {\n trackNames,\n tracksToPull,\n videoStreamsToClose,\n audioTracksToClose,\n currentAudioTracks: Object.keys(this._state.pulledAudioTracks),\n currentVideoStreams: Object.keys(this._state.pulledVideoStreams),\n });\n\n // Pull new tracks.\n const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));\n\n // Close old tracks.\n await Promise.all([...audioTracksToClose, ...videoStreamsToClose].map(([_, { ctx }]) => ctx.dispose()));\n\n log('reconciled tracks', {\n currentAudioTracks: Object.keys(this._state.pulledAudioTracks),\n currentVideoStreams: Object.keys(this._state.pulledVideoStreams),\n });\n\n this.stateUpdated.emit(this._state);\n if (pullResults.some(({ shouldRetry }) => shouldRetry)) {\n await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));\n log.info('retrying pull tracks', { tracksToPull });\n invariant(this._pullTracksTask);\n this._pullTracksTask.schedule();\n }\n }\n\n private async _pushTracks(): Promise<void> {\n if (!this._state.peer?.isOpen) {\n return;\n }\n\n let updated = false;\n const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([\n this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [\n { maxFramerate: MAX_WEB_CAM_FRAMERATE, maxBitrate: MAX_WEB_CAM_BITRATE },\n ]),\n this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [{ networkPriority: 'high' }]),\n this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack),\n ]);\n\n if (pushVideoResult.track !== this._state.pushedVideoTrack) {\n this._state.pushedVideoTrack = pushVideoResult.track;\n updated = true;\n }\n if (pushAudioResult.track !== this._state.pushedAudioTrack) {\n this._state.pushedAudioTrack = pushAudioResult.track;\n updated = true;\n }\n if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {\n this._state.pushedScreenshareTrack = pushScreenshareResult.track;\n updated = true;\n }\n\n const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;\n if (updated) {\n this.stateUpdated.emit(this._state);\n }\n\n if (shouldRetry) {\n await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));\n log.info('retrying push tracks', { pushVideoResult, pushAudioResult, pushScreenshareResult });\n invariant(this._pushTracksTask);\n this._pushTracksTask.schedule();\n }\n }\n\n private async _pullTrack(name: EncodedTrackName): Promise<{ shouldRetry: boolean }> {\n const ctx = this._ctx.derive();\n try {\n const trackData = TrackNameCodec.decode(name);\n // We need to set mid here to `undefined`, because mid is peer specific.\n const track = await this._state.peer!.pullTrack({ trackData: { ...trackData, mid: undefined }, ctx });\n if (track?.readyState === 'ended') {\n throw new Error('Pulled track ended immediately');\n }\n\n switch (track?.kind) {\n case 'audio': {\n this._state.pulledAudioTracks[name] = { track, ctx };\n ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);\n return { shouldRetry: false };\n }\n case 'video': {\n const mediaStream = new MediaStream();\n mediaStream.addTrack(track);\n this._state.pulledVideoStreams[name] = { stream: mediaStream, ctx };\n ctx.onDispose(() => {\n mediaStream.removeTrack(track);\n track.stop();\n delete this._state.pulledVideoStreams[name];\n });\n return { shouldRetry: false };\n }\n default:\n throw new Error(`Invalid track kind: ${track?.kind}`);\n }\n } catch (err) {\n log.info('failed to pull track', { err, name });\n void ctx.dispose();\n return { shouldRetry: true };\n }\n }\n\n private async _maybePushTrack(\n track?: MediaStreamTrack,\n previousTrack?: TrackObject,\n encodings?: RTCRtpEncodingParameters[],\n ): Promise<{ track?: TrackObject; shouldRetry?: boolean }> {\n if (!track && !previousTrack) {\n return { track: undefined };\n }\n\n const ctx = this._ctx.derive();\n try {\n return {\n track: await this._state.peer!.pushTrack({\n ctx,\n track: track ?? null,\n previousTrack,\n encodings,\n }),\n };\n } catch (err) {\n log.info('failed to push track', { err, track, previousTrack, encodings });\n void ctx.dispose();\n return { shouldRetry: true };\n }\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { DeferredTask, Event, sleep } from '@dxos/async';\nimport { Resource } from '@dxos/context';\n\nimport { monitorAudioLevel } from './util';\n\nconst NOT_SPEAKING_AFTER = 500; // [ms]\nconst START_SPEAKING_THRESHOLD = 0.05;\nconst CONTINUE_SPEAKING_THRESHOLD = 0.02;\nconst MIN_EVENT_INTERVAL = 100; // [ms]\n\nexport class SpeakingMonitor extends Resource {\n /**\n * Event that is emitted when the user starts or stops speaking.\n * It is debounced to prevent rapid state changes.\n */\n public readonly speakingChanged = new Event<boolean>();\n\n /**\n * Real state of the user speaking.\n */\n private _isSpeaking = false;\n private _lastEventTime = 0;\n private _deferredUpdate?: DeferredTask | undefined;\n\n constructor(private readonly _mediaStreamTrack: MediaStreamTrack) {\n super();\n }\n\n get isSpeaking(): boolean {\n return this._isSpeaking;\n }\n\n protected override async _open(): Promise<void> {\n this._deferredUpdate = new DeferredTask(this._ctx, async () => this._emitSpeakingChanged());\n\n let timeout: NodeJS.Timeout | undefined;\n const cleanup = monitorAudioLevel({\n mediaStreamTrack: this._mediaStreamTrack,\n onMeasure: (vol) => {\n // Once the user has been determined to be speaking, we want\n // to lower the threshold because speech patterns don't always\n // kick up above 0.05.\n const audioLevelAboveThreshold =\n vol > (this._isSpeaking ? CONTINUE_SPEAKING_THRESHOLD : START_SPEAKING_THRESHOLD);\n if (audioLevelAboveThreshold) {\n // User is still speaking, clear timeout & reset.\n clearTimeout(timeout);\n timeout = undefined;\n if (!this._isSpeaking) {\n this._isSpeaking = true;\n this._deferredUpdate?.schedule();\n }\n } else if (timeout === undefined) {\n // User is not speaking and timeout is not set.\n timeout = setTimeout(() => {\n this._isSpeaking = false;\n timeout = undefined;\n this._deferredUpdate?.schedule();\n }, NOT_SPEAKING_AFTER);\n }\n },\n });\n this._ctx.onDispose(() => {\n cleanup();\n clearTimeout(timeout);\n });\n }\n\n /**\n * Emits the speaking changed event with debouncing based on timing.\n */\n private async _emitSpeakingChanged(): Promise<void> {\n const timeSinceLastEvent = Date.now() - this._lastEventTime;\n const timeToNextEvent = MIN_EVENT_INTERVAL - timeSinceLastEvent;\n if (timeToNextEvent > 0) {\n await sleep(timeToNextEvent);\n }\n this._lastEventTime = Date.now();\n this.speakingChanged.emit(this._isSpeaking);\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport const monitorAudioLevel = ({\n mediaStreamTrack,\n intervalMs = 1000 / 10, // 12 fps.\n onMeasure,\n}: {\n mediaStreamTrack: MediaStreamTrack;\n intervalMs?: number;\n onMeasure: (value: number) => void;\n}) => {\n let timeout = -1;\n let interval = -1;\n const audioContext = new AudioContext();\n const stream = new MediaStream();\n stream.addTrack(mediaStreamTrack);\n const mediaStreamAudioSourceNode = audioContext.createMediaStreamSource(stream);\n const analyserNode = audioContext.createAnalyser();\n mediaStreamAudioSourceNode.connect(analyserNode);\n // Since we just need a rough approximation and will be measuring\n // frequently, we want to drop this down from the default of 2048.\n analyserNode.fftSize = 32;\n\n const pcmData = new Float32Array(analyserNode.fftSize);\n let peak = 0;\n\n interval = window.setInterval(() => {\n onMeasure(peak);\n peak = 0;\n }, intervalMs);\n\n const tick = () => {\n timeout = window.setTimeout(() => {\n analyserNode.getFloatTimeDomainData(pcmData);\n let sumSquares = 0.0;\n for (const amplitude of pcmData) {\n sumSquares += amplitude * amplitude;\n }\n const current = Math.sqrt(sumSquares / pcmData.length);\n if (current > peak) {\n peak = current;\n }\n tick();\n }, intervalMs);\n };\n tick();\n\n return () => {\n mediaStreamAudioSourceNode.disconnect();\n analyserNode.disconnect();\n void audioContext.close();\n clearInterval(interval);\n clearTimeout(timeout);\n stream.removeTrack(mediaStreamTrack);\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { PersistentLifecycle, Trigger, scheduleTask } from '@dxos/async';\nimport { type Context, Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport {\n type ErrorResponse,\n type RenegotiationResponse,\n type SessionResponse,\n type TrackObject,\n type TracksResponse,\n} from '../types';\nimport { HistoryCache } from './history-cache';\nimport { BulkRequestDispatcher, FIFOScheduler } from './task-scheduling';\n\nconst NETWORK_TIMEOUT = 5_000;\n\nexport type Session = {\n sessionId: string;\n peerConnection: RTCPeerConnection;\n};\n\nexport type CallsServiceConfig = {\n apiBase: string;\n apiExtraProps?: string;\n iceServers?: RTCIceServer[];\n};\n\nexport type HistoryRecord =\n | {\n endpoint: string;\n type: 'request';\n time: string;\n method: string;\n body: any;\n }\n | {\n endpoint: string;\n type: 'response';\n time: string;\n status: number;\n text?: string;\n json?: any;\n };\n\n/**\n * Client for Cloudflare Calls service.\n * API: https://developers.cloudflare.com/calls/https-api/\n * Inspired by client from https://github.com/threepointone/partyserver/tree/main/packages/partytracks\n */\n// TODO(mykola): Expose session errors.\nexport class CallsServicePeer extends Resource {\n public readonly history = new HistoryCache<HistoryRecord>(100);\n\n private readonly _persistentLifecycle = new PersistentLifecycle<Session>({\n start: () => this._startSession(),\n stop: (session) => this._stopSession(session),\n });\n\n private readonly _config: CallsServiceConfig;\n\n taskScheduler = new FIFOScheduler();\n pushTrackDispatcher = new BulkRequestDispatcher<\n {\n trackName: string;\n transceiver: RTCRtpTransceiver;\n },\n { tracks: TrackObject[] }\n >(32);\n\n pullTrackDispatcher = new BulkRequestDispatcher<\n TrackObject,\n {\n /**\n * trackName -> { resolvedTrack, mid }\n */\n trackMap: Map<string, { resolvedTrack: Promise<MediaStreamTrack>; mid: string }>;\n }\n >(32);\n\n closeTrackDispatcher = new BulkRequestDispatcher(32);\n constructor(config: CallsServiceConfig) {\n super();\n this._config = config;\n }\n\n protected override async _open(ctx: Context): Promise<void> {\n await this._persistentLifecycle.open(ctx);\n }\n\n protected override async _close(): Promise<void> {\n await this._persistentLifecycle.close();\n }\n\n get session() {\n return this._persistentLifecycle.state;\n }\n\n private async _startSession() {\n const peerConnection = await this._createRtcConnection();\n const sessionId = await this._initiateCallSession();\n return { sessionId, peerConnection };\n }\n\n private async _stopSession(session: Session): Promise<void> {\n session.peerConnection.close();\n }\n\n private async _createRtcConnection(): Promise<RTCPeerConnection> {\n const peerConnection = new RTCPeerConnection({\n iceServers: this._config.iceServers,\n bundlePolicy: 'max-bundle',\n });\n peerConnection.addEventListener('connectionstatechange', () => {\n if (peerConnection.connectionState === 'failed' || peerConnection.connectionState === 'closed') {\n log.info('calls connection failed', { state: peerConnection.connectionState });\n void this._persistentLifecycle.scheduleRestart();\n }\n });\n\n let iceTimeout = -1;\n peerConnection.addEventListener('iceconnectionstatechange', () => {\n clearTimeout(iceTimeout);\n if (peerConnection.iceConnectionState === 'failed' || peerConnection.iceConnectionState === 'closed') {\n log.info('calls connection to ICEs failed', { state: peerConnection.iceConnectionState });\n void this._persistentLifecycle.scheduleRestart();\n } else if (peerConnection.iceConnectionState === 'disconnected') {\n // TODO(mykola): we should start to inspect the connection stats from here on for\n // any other signs of trouble to guide what to do next (instead of just hoping\n // for the best like we do here for now)\n const timeoutSeconds = 7;\n iceTimeout = window.setTimeout(() => {\n if (peerConnection.iceConnectionState === 'connected') {\n log.info('calls iceConnectionState is connected');\n return;\n }\n\n log.info('calls iceConnectionState timed out', { state: peerConnection.iceConnectionState, timeoutSeconds });\n void this._persistentLifecycle.scheduleRestart();\n }, timeoutSeconds * 1_000);\n }\n });\n\n return peerConnection;\n }\n\n private async _initiateCallSession(): Promise<string> {\n log('creating new session');\n const { sessionId } = await this._fetch<SessionResponse>('/sessions/new?SESSION', { method: 'POST' });\n return sessionId;\n }\n\n private async _fetch<T extends ErrorResponse>(relativePath: string, requestInit?: RequestInit): Promise<T> {\n this.history.push({\n endpoint: relativePath,\n type: 'request',\n time: new Date().toISOString(),\n method: requestInit?.method ?? 'GET',\n body: requestInit?.body,\n });\n // TODO(mykola): Handle access control. Use EdgeClient.\n const response = await fetch(`${this._config.apiBase}${relativePath}`, { ...requestInit, redirect: 'manual' });\n if (response.status >= 400) {\n log.error('error while fetching from Calls service', { status: response.status, text: await response.text() });\n throw new Error('Error while fetching from Calls service');\n }\n\n try {\n const data = (await response.clone().json()) as T;\n this.history.push({\n endpoint: relativePath,\n type: 'response',\n time: new Date().toISOString(),\n status: response.status,\n json: data,\n });\n if (data.errorCode) {\n throw new Error(data.errorDescription);\n }\n\n return data;\n } catch (error) {\n const text = await response.text();\n this.history.push({\n endpoint: relativePath,\n type: 'response',\n time: new Date().toISOString(),\n status: response.status,\n text,\n });\n log.error('Error parsing response from Calls service', {\n error,\n text,\n status: response.status,\n });\n throw error;\n }\n }\n\n private async _pushTrackInBulk({\n ctx,\n peerConnection,\n transceiver,\n sessionId,\n trackName,\n }: {\n ctx: Context;\n peerConnection: RTCPeerConnection;\n transceiver: RTCRtpTransceiver;\n sessionId: string;\n trackName: string;\n }): Promise<TrackObject | void> {\n log.verbose('pushing track ', trackName);\n const pushedTrackPromise = this.pushTrackDispatcher\n .doBulkRequest({ trackName, transceiver }, (tracks) =>\n this.taskScheduler.schedule(async () => {\n // Create offer.\n // Turn on Opus DTX to save bandwidth and set the offer as the local description.\n const offer = await peerConnection.createOffer();\n offer.sdp = offer.sdp?.replace('useinbandfec=1', 'usedtx=1;useinbandfec=1');\n await peerConnection.setLocalDescription(offer);\n\n const response = await this._fetch<TracksResponse>(`/sessions/${sessionId}/tracks/new?PUSHING`, {\n method: 'POST',\n body: JSON.stringify({\n sessionDescription: {\n sdp: offer.sdp,\n type: 'offer',\n },\n tracks: tracks.map(({ trackName, transceiver }) => ({\n trackName,\n mid: transceiver.mid,\n location: 'local',\n })),\n }),\n });\n\n invariant(response.tracks !== undefined);\n if (!response.errorCode) {\n await peerConnection.setRemoteDescription(new RTCSessionDescription(response.sessionDescription));\n await peerConnectionIsConnected(peerConnection);\n }\n\n return {\n tracks: response.tracks,\n };\n }),\n )\n .then(async ({ tracks }) => {\n const trackData = tracks.find((t) => t.mid === transceiver.mid);\n if (trackData) {\n // we wait for the transceiver to start sending data before we emit\n // the track metadata to ensure that the track will be able to be\n // pulled before making the metadata available to anyone else.\n // await waitForTransceiverToSendData(ctx, transceiver);\n return {\n ...trackData,\n sessionId,\n location: 'remote',\n } satisfies TrackObject;\n } else {\n log.error('missing track data');\n }\n });\n\n const onDispose = async () => {\n if (transceiver.mid) {\n await this._closeTrackInBulk(peerConnection, transceiver.mid, sessionId);\n }\n };\n\n ctx?.onDispose(async () => await onDispose());\n this._ctx.onDispose(() => onDispose());\n\n return pushedTrackPromise;\n }\n\n async pushTrack({\n track,\n encodings = [],\n ctx,\n previousTrack,\n }: {\n track: MediaStreamTrack | null;\n ctx: Context;\n encodings?: RTCRtpEncodingParameters[];\n previousTrack?: TrackObject;\n }): Promise<TrackObject | undefined> {\n await this.waitUntilOpen();\n invariant(this.session);\n log('trying to push track', { track, previousTrack, encodings });\n if (previousTrack) {\n const transceiver = this.session.peerConnection.getTransceivers().find((t) => t.mid === previousTrack.mid);\n if (transceiver?.sender.track === track) {\n log.verbose('track already pushed', { track, previousTrack, transceiver });\n return previousTrack;\n } else if (transceiver) {\n log.verbose('replacing track', { track, previousTrack, transceiver });\n transceiver.sender.replaceTrack(track).catch((err) => log.catch(err));\n return previousTrack;\n }\n }\n invariant(track);\n\n // We want a single id for this connection.\n const stableId = crypto.randomUUID();\n const transceiver = this.session.peerConnection!.addTransceiver(track, { direction: 'sendonly' });\n log.verbose('creating transceiver');\n\n const pushedTrackData = await this._pushTrackInBulk({\n ctx,\n peerConnection: this.session.peerConnection!,\n transceiver,\n sessionId: this.session.sessionId!,\n trackName: stableId,\n });\n invariant(pushedTrackData);\n\n const parameters = transceiver.sender.getParameters();\n encodings.forEach((encoding, i) => {\n const existing = parameters.encodings[i];\n parameters.encodings[i] = { ...existing, ...encoding };\n });\n transceiver.sender.setParameters(parameters).catch((err) => log.catch(err));\n\n return pushedTrackData;\n }\n\n // TODO(mykola): Add retry logic if the tracks fails to pull.\n private async _pullTrackInBulk({\n peerConnection,\n sessionId,\n trackData,\n ctx,\n }: {\n peerConnection: RTCPeerConnection;\n sessionId: string;\n trackData: TrackObject;\n ctx?: Context;\n }): Promise<MediaStreamTrack | undefined> {\n let mid = '';\n log('pulling track', { trackName: trackData.trackName });\n const pulledTrackPromise = this.pullTrackDispatcher\n .doBulkRequest(trackData, (tracks) =>\n this.taskScheduler.schedule(async () => {\n const newTrackResponse = await this._fetch<TracksResponse>(`/sessions/${sessionId}/tracks/new?PULLING`, {\n method: 'POST',\n body: JSON.stringify({ tracks }),\n });\n\n if (newTrackResponse.errorCode) {\n throw new Error(newTrackResponse.errorDescription);\n }\n\n invariant(newTrackResponse.tracks);\n const trackMap = tracks.reduce((acc, track) => {\n const pulledTrackData = newTrackResponse.tracks?.find(\n (t) => t.trackName === track.trackName && t.sessionId === track.sessionId,\n );\n\n if (pulledTrackData && pulledTrackData.mid) {\n acc.set(track.trackName!, {\n mid: pulledTrackData.mid,\n resolvedTrack: resolveTrack(peerConnection, (t) => t.mid === pulledTrackData.mid),\n });\n }\n\n return acc;\n }, new Map<string, { resolvedTrack: Promise<MediaStreamTrack>; mid: string }>());\n\n if (newTrackResponse.requiresImmediateRenegotiation) {\n await peerConnection.setRemoteDescription(new RTCSessionDescription(newTrackResponse.sessionDescription));\n const answer = await peerConnection.createAnswer();\n await peerConnection.setLocalDescription(answer);\n\n const renegotiationResponse = await this._fetch<RenegotiationResponse>(\n `/sessions/${sessionId}/renegotiate`,\n {\n method: 'PUT',\n body: JSON.stringify({\n sessionDescription: {\n type: 'answer',\n sdp: peerConnection.currentLocalDescription?.sdp,\n },\n }),\n },\n );\n\n if (renegotiationResponse.errorCode) {\n throw new Error(renegotiationResponse.errorDescription);\n } else {\n await peerConnectionIsConnected(peerConnection);\n }\n }\n\n return { trackMap };\n }),\n )\n .then(({ trackMap }) => {\n const trackInfo = trackMap.get(trackData.trackName!);\n if (trackInfo) {\n return trackInfo.resolvedTrack\n .then((track) => {\n mid = trackInfo.mid;\n return track;\n })\n .catch((err) => log.catch(err));\n } else {\n log.info('missing track info', { trackData, availableTracks: Array.from(trackMap.keys()) });\n }\n });\n\n const onDispose = async () => {\n if (mid) {\n log('closing pulled track ', trackData.trackName);\n await this._closeTrackInBulk(peerConnection, mid, sessionId);\n mid = '';\n }\n };\n\n this._ctx.onDispose(() => onDispose());\n ctx?.onDispose(() => onDispose());\n\n return pulledTrackPromise as Promise<MediaStreamTrack | undefined>;\n }\n\n async pullTrack({\n ctx,\n trackData,\n }: {\n trackData: TrackObject;\n ctx?: Context;\n }): Promise<MediaStreamTrack | undefined> {\n await this.waitUntilOpen();\n\n invariant(this.session);\n const session = this.session;\n return this._pullTrackInBulk({\n peerConnection: session.peerConnection,\n sessionId: session.sessionId,\n trackData,\n ctx,\n });\n }\n\n async _closeTrackInBulk(peerConnection: RTCPeerConnection, mid: string, sessionId: string): Promise<void> {\n const transceiver = peerConnection.getTransceivers().find((t) => t.mid === mid);\n\n if (peerConnection.connectionState !== 'connected' || transceiver === undefined) {\n return;\n }\n await this.closeTrackDispatcher.doBulkRequest({ mid }, (mids) =>\n this.taskScheduler.schedule(async () => {\n transceiver.stop();\n const activeTransceivers = peerConnection\n .getTransceivers()\n .filter((t) => t.mid !== mid && t.direction !== 'stopped');\n\n let requestBody;\n if (activeTransceivers.length > 0) {\n // create an offer\n const offer = await peerConnection.createOffer();\n // And set the offer as the local description\n await peerConnection.setLocalDescription(offer);\n requestBody = {\n tracks: mids,\n sessionDescription: {\n sdp: peerConnection.localDescription?.sdp,\n type: 'offer',\n },\n force: false,\n };\n } else {\n requestBody = {\n tracks: mids,\n force: true,\n };\n }\n\n const response = await this._fetch<TracksResponse>(`/sessions/${sessionId}/tracks/close`, {\n method: 'PUT',\n body: JSON.stringify(requestBody),\n });\n\n if (requestBody.sessionDescription) {\n await peerConnection.setRemoteDescription(new RTCSessionDescription(response.sessionDescription));\n }\n }),\n );\n }\n}\n\nconst resolveTrack = async (\n peerConnection: RTCPeerConnection,\n compare: (t: RTCRtpTransceiver) => boolean,\n timeout = NETWORK_TIMEOUT,\n) =>\n new Promise<MediaStreamTrack>((resolve, reject) => {\n setTimeout(reject, timeout);\n const handler = () => {\n const transceiver = peerConnection.getTransceivers().find(compare);\n if (transceiver) {\n resolve(transceiver.receiver.track);\n peerConnection.removeEventListener('track', handler);\n }\n };\n\n peerConnection.addEventListener('track', handler);\n });\n\nconst peerConnectionIsConnected = async (peerConnection: RTCPeerConnection) => {\n if (peerConnection.connectionState !== 'connected') {\n const connected = new Promise((resolve, reject) => {\n // Timeout after 5s.\n const timeout = setTimeout(() => {\n peerConnection.removeEventListener('connectionstatechange', connectionStateChangeHandler);\n reject(new Error('Connection timeout'));\n }, NETWORK_TIMEOUT);\n\n const connectionStateChangeHandler = () => {\n if (peerConnection.connectionState === 'connected') {\n peerConnection.removeEventListener('connectionstatechange', connectionStateChangeHandler);\n clearTimeout(timeout);\n resolve(undefined);\n }\n };\n peerConnection.addEventListener('connectionstatechange', connectionStateChangeHandler);\n });\n\n await connected;\n }\n};\n\nconst INITIAL_DELAY = 50;\nconst MAX_DELAY = 500;\nconst MAX_RETRIES = 20;\nconst WAIT_FOR_DATA_TIMEOUT = 10_000;\n\nconst waitForTransceiverToSendData = async (ctx: Context, transceiver: RTCRtpTransceiver): Promise<void> => {\n let delay = INITIAL_DELAY;\n let checks = 0;\n const waitForData = new Trigger();\n ctx.onDispose(() => waitForData.throw(new Error('Transceiver was closed')));\n\n const checkStats = async () => {\n if (ctx.disposed) {\n return;\n }\n\n try {\n const stats = await transceiver.sender.getStats();\n let dataFound = false;\n stats.forEach((stat) => {\n if (stat.type === 'outbound-rtp' && stat.bytesSent > 0) {\n dataFound = true;\n }\n });\n\n if (dataFound) {\n waitForData.wake();\n return;\n }\n } catch {\n // Stats might not be available yet, continue checking\n }\n checks++;\n if (checks > MAX_RETRIES) {\n waitForData.throw(new Error('Transceiver did not send data'));\n return;\n }\n\n delay = Math.min(delay * 2, MAX_DELAY); // Exponential backoff with max cap\n scheduleTask(ctx, checkStats, delay);\n };\n\n void checkStats();\n return waitForData.wait({ timeout: WAIT_FOR_DATA_TIMEOUT });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Array that holds the last N items.\n */\nexport class HistoryCache<T> {\n private readonly _limit: number;\n private readonly _messages: T[];\n\n constructor(limit = 100) {\n this._limit = limit;\n this._messages = [];\n }\n\n push(...messages: T[]): void {\n if (this._messages.length >= this._limit) {\n this._messages.shift(); // Remove the oldest message\n }\n this._messages.push(...messages); // Add new message\n }\n\n get(): T[] {\n return this._messages;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nconst DefaultBatchSizeLimit = 64;\n\ntype Task<Value = unknown> = () => Promise<Value>;\n\nexport class FIFOScheduler {\n #schedulerChain: Promise<void>;\n\n constructor() {\n this.#schedulerChain = Promise.resolve();\n }\n\n schedule<T>(task: Task<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n this.#schedulerChain = this.#schedulerChain.then(async () => {\n try {\n resolve(await task());\n } catch (error: any) {\n reject(error);\n }\n });\n });\n }\n}\n\n// TODO(mykola): Reconcile with @dxos/async task scheduling.\nexport class BulkRequestDispatcher<RequestEntryProps, BulkResponse> {\n #currentBatch: RequestEntryProps[];\n #currentBulkResponse: Promise<BulkResponse> | null;\n #batchSizeLimit: number;\n\n constructor(batchSizeLimit: number = DefaultBatchSizeLimit) {\n this.#currentBatch = [];\n this.#currentBulkResponse = null;\n this.#batchSizeLimit = batchSizeLimit;\n }\n\n /**\n * Returns a bulk response promise.\n * At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.\n */\n doBulkRequest(\n params: RequestEntryProps,\n bulkRequestFunc: (bulkCopy: RequestEntryProps[]) => Promise<BulkResponse>,\n ): Promise<BulkResponse> {\n if (this.#currentBatch.length >= this.#batchSizeLimit) {\n // If it reaches the batch size limit, we make another bulk request.\n this.#currentBatch = [];\n this.#currentBulkResponse = null;\n }\n this.#currentBatch.push(params);\n if (this.#currentBulkResponse != null) {\n return this.#currentBulkResponse;\n }\n\n // Save the current batch list reference in the function scope because this.#currentBatch could be reset\n // if the batch limit is reached.\n const batch = this.#currentBatch;\n this.#currentBulkResponse = new Promise((resolve, reject) => {\n // script\n // |\n // V\n // microtasks (Promise)\n // |\n // V\n // macrotasks (setTimeout)\n //\n // macrotasks are run in the event loop iteration end, so we use that moment to make the bulkRequestFunc call.\n setTimeout(() => {\n // When the bulk request happens, the batch list and the response is reset to start another batch.\n // Coming callers will wait for a new response promise.\n this.#currentBulkResponse = null;\n\n // We cut here to make the bulk request.\n const batchCopy = batch.splice(0, batch.length);\n bulkRequestFunc(batchCopy)\n .then((result) => {\n resolve(result);\n })\n .catch((err) => {\n reject(err);\n });\n }, 0);\n });\n\n // This bulk response needs to be processed to extract the the result for the entry.\n return this.#currentBulkResponse;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { log } from '@dxos/log';\n\nexport const getUserMediaTrack = async (\n kind: MediaDeviceKind,\n constraints: MediaTrackConstraints = {},\n deviceList?: MediaDeviceInfo[],\n): Promise<MediaStreamTrack> => {\n deviceList ??= (await getDeviceList()).filter((device) => device.kind === kind);\n const firstDevice = deviceList[0];\n if (!firstDevice) {\n throw new Error('No devices found');\n }\n\n return acquireTrack(firstDevice, constraints);\n};\n\nconst acquireTrack = async (device: MediaDeviceInfo, constraints: MediaTrackConstraints): Promise<MediaStreamTrack> => {\n const { deviceId, label } = device;\n log.info(`requesting ${label}`);\n\n const mediaStream = await navigator.mediaDevices.getUserMedia(\n device.kind === 'videoinput' ? { video: { ...constraints, deviceId } } : { audio: { ...constraints, deviceId } },\n );\n return device.kind === 'videoinput' ? mediaStream.getVideoTracks()[0] : mediaStream.getAudioTracks()[0];\n};\n\n// TODO(mykola): Handle devicechange event.\nexport const getDeviceList = () => navigator.mediaDevices.enumerateDevices();\n\nconst SCREENSHARE_CONSTRAINTS = {\n video: {\n width: { max: 1920 },\n height: { max: 1080 },\n frameRate: { max: 10 },\n },\n};\n\nexport const getScreenshare = async ({ contentHint }: { contentHint: string }) => {\n // Get 1080p equivalent screenshare with 10fps, but save natural sharing content aspect ratio.\n const ms = await navigator.mediaDevices.getDisplayMedia(SCREENSHARE_CONSTRAINTS);\n ms.getVideoTracks().forEach((track) => {\n if (contentHint && 'contentHint' in track) {\n track.contentHint = contentHint;\n }\n });\n\n return ms;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n//\n\nimport { scheduleTaskInterval, waitForCondition } from '@dxos/async';\nimport { type Context, cancelWithContext } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Creates a black canvas stream track.\n * We need this to to have black rectangle video that is live (have frames) when video feed is disabled.\n */\nexport const createBlackCanvasStreamTrack = async ({\n ctx,\n width,\n height,\n}: {\n ctx: Context;\n width: number;\n height: number;\n}): Promise<MediaStreamTrack> => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n\n const canvasCtx = canvas.getContext('2d');\n invariant(canvasCtx);\n const drawFrame = () => {\n canvasCtx.fillStyle = 'black';\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n };\n scheduleTaskInterval(ctx, async () => drawFrame(), 200);\n\n const track = canvas.captureStream().getVideoTracks()[0];\n drawFrame();\n\n await cancelWithContext(ctx, waitForCondition({ condition: () => track.readyState === 'live', timeout: 1_000 }));\n\n return track;\n};\n\nlet audioContextStartedPreviously = false;\nconst userGestureEvents = [\n 'click',\n 'contextmenu',\n 'auxclick',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'pointerup',\n 'touchend',\n 'keydown',\n 'keyup',\n];\n\n/**\n * Creates an inaudible audio stream track.\n * We need this to have audio track available when audio is disabled.\n */\nexport const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context }): Promise<MediaStreamTrack> => {\n const audioContext = new window.AudioContext();\n\n const oscillator = audioContext.createOscillator();\n oscillator.type = 'triangle';\n oscillator.frequency.setValueAtTime(20, audioContext.currentTime);\n\n const gainNode = audioContext.createGain();\n gainNode.gain.setValueAtTime(0, audioContext.currentTime);\n oscillator.connect(gainNode);\n\n const destination = audioContext.createMediaStreamDestination();\n gainNode.connect(destination);\n\n let oscillatorStarted = false;\n const ensureOscillatorStarted = () => {\n if (oscillatorStarted) {\n return;\n }\n oscillator.start();\n oscillatorStarted = true;\n };\n\n const stateChangeHandler = () => {\n if (audioContext.state === 'running') {\n audioContextStartedPreviously = true;\n ensureOscillatorStarted();\n }\n\n if (audioContext.state === 'suspended' || (audioContext.state as string) === 'interrupted') {\n resumeAudioContext();\n }\n };\n\n audioContext.addEventListener('statechange', stateChangeHandler);\n\n const resumeAudioContext = () => {\n void audioContext.resume().then(() => {\n cleanUpUserGestureListeners();\n });\n };\n\n const cleanUpUserGestureListeners = () => {\n userGestureEvents.forEach((gesture) => {\n document.removeEventListener(gesture, resumeAudioContext, {\n capture: true,\n });\n });\n };\n\n if (audioContextStartedPreviously) {\n resumeAudioContext();\n } else {\n userGestureEvents.forEach((gesture) => {\n document.addEventListener(gesture, resumeAudioContext, {\n capture: true,\n });\n });\n }\n\n ctx.onDispose(async () => {\n cleanUpUserGestureListeners();\n oscillator.disconnect();\n oscillator.stop();\n await audioContext.close();\n });\n\n return destination.stream.getAudioTracks()[0];\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { Obj } from '@dxos/echo';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/operations';\nimport { useOnTransition } from '@dxos/react-ui';\nimport { type ContentBlock } from '@dxos/types';\n\nexport const useOnEditAnalytics = (\n message: any | undefined,\n textBlock: ContentBlock.Text | undefined,\n editing: boolean,\n) => {\n const { invokePromise } = useOperationInvoker();\n\n const onEdit = useCallback(() => {\n if (!message || !textBlock) {\n return;\n }\n\n const db = Obj.getDatabase(message);\n if (!db) {\n return;\n }\n\n void invokePromise(ObservabilityOperation.SendEvent, {\n name: 'threads.message.update',\n properties: {\n spaceId: db.spaceId,\n messageId: message.id,\n messageLength: textBlock?.text.length,\n },\n });\n }, [invokePromise, message, textBlock]);\n\n useOnTransition(editing, true, false, onEdit);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport { createBlackCanvasStreamTrack } from '../calls/util/stub-media-streams';\n\nexport const useBlackCanvasStreamTrack = () => {\n const [blackCanvasStreamTrack, setBlackCanvasStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);\n useEffect(() => {\n const ctx = new Context();\n scheduleTask(ctx, async () => {\n const blackCanvasStreamTrack = await createBlackCanvasStreamTrack({ ctx, width: 720, height: 480 });\n setBlackCanvasStreamTrack(blackCanvasStreamTrack);\n });\n\n return () => {\n void ctx.dispose();\n };\n }, []);\n\n return blackCanvasStreamTrack;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\n// TODO(burdon): Standardize across plugins/composer.\nexport const useDebugMode = () => {\n const [enabled, setEnabled] = useState(false);\n useEffect(() => {\n const handler = (ev: KeyboardEvent) => {\n if (ev.key.toLowerCase() === 'd' && ev.ctrlKey) {\n ev.preventDefault();\n setEnabled(!enabled);\n }\n };\n\n document.addEventListener('keypress', handler);\n return () => {\n document.removeEventListener('keypress', handler);\n };\n }, [enabled]);\n\n return enabled;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport { createInaudibleAudioStreamTrack } from '../calls/util/stub-media-streams';\n\nexport const useInaudibleAudioStreamTrack = () => {\n const [audioStreamTrack, setAudioStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);\n useEffect(() => {\n const ctx = new Context();\n scheduleTask(ctx, async () => {\n const audioStreamTrack = await createInaudibleAudioStreamTrack({ ctx });\n setAudioStreamTrack(audioStreamTrack);\n });\n\n return () => {\n void ctx.dispose();\n };\n }, []);\n\n return audioStreamTrack;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type RefObject, useEffect, useRef, useState } from 'react';\n\nexport const useVideoStreamTrack = (videoElement: RefObject<HTMLVideoElement | null>, videoSrc: string) => {\n // Get video stream track.\n const [videoStreamTrack, setVideoStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);\n const hadRun = useRef(false);\n useEffect(() => {\n // This is done to capture only one video stream.\n if (!videoElement.current || hadRun.current || !videoSrc) {\n return;\n }\n hadRun.current = true;\n videoElement.current.addEventListener('playing', () => {\n if (videoStreamTrack) {\n return;\n }\n const stream = (videoElement.current as any).captureStream();\n const track = stream.getTracks()[0];\n if (track && !videoStreamTrack) {\n setVideoStreamTrack(track);\n }\n stream.onaddtrack = (event: MediaStreamTrackEvent) => {\n if (event.track.kind === 'video' && !videoStreamTrack) {\n setVideoStreamTrack(event.track);\n }\n };\n });\n videoElement.current.src = videoSrc;\n }, [videoElement.current, videoSrc]);\n\n return videoStreamTrack;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Plugin", "trim", "meta", "id", "name", "description", "icon", "iconHue", "source", "THREAD_ITEM", "Event", "synchronized", "Resource", "invariant", "isNonNullable", "CallSwarmSynchronizer", "DeferredTask", "Context", "Resource", "generateName", "invariant", "PublicKey", "log", "buf", "ActivitySchema", "ConnectionState", "isNonNullable", "codec", "invariant", "buf", "UserStateSchema", "encode", "message", "toBinary", "decode", "sessionId", "trackData", "mid", "trackName", "name", "location", "__dxlog_file", "stateUpdated", "_state", "activities", "_networkService", "_lastSwarmEvent", "_reconcileSwarmStateTask", "_identityKey", "_deviceKey", "undefined", "_displayName", "_swarmCtx", "_sendStateTask", "networkService", "setRaisedHand", "raisedHand", "_notifyAndSchedule", "setSpeaking", "speaking", "setJoined", "setTracks", "tracks", "setActivity", "lamportTimestamp", "id", "payload", "identity", "profile", "displayName", "log", "verbose", "roomId", "_sendState", "_reconcileSwarmState", "invariant", "Context", "getTopic", "topic", "peer", "identityKey", "peerKey", "stream", "subscribeSwarmState", "cleanup", "close", "leaveSwarm", "catch", "window", "self", "swarm", "emit", "joined", "name", "key", "buf", "state", "codec", "encode", "_processSwarmEvent", "swarmEvent", "inactivePeers", "sort", "peer1", "peer2", "localeCompare", "users", "peers", "error", "filter", "length", "forEach", "lastActivity", "LamportTimestampCrdt", "getLastState", "version", "scheduleTaskInterval", "schedule", "states", "maxTimestamp", "Math", "sortedStates", "timestamp", "Resource", "cancelWithContext", "synchronized", "invariant", "log", "SpeakingMonitor", "DeferredTask", "Event", "sleep", "Resource", "monitorAudioLevel", "mediaStreamTrack", "intervalMs", "onMeasure", "timeout", "interval", "audioContext", "AudioContext", "stream", "MediaStream", "addTrack", "mediaStreamAudioSourceNode", "createMediaStreamSource", "analyserNode", "createAnalyser", "connect", "fftSize", "pcmData", "Float32Array", "peak", "window", "setInterval", "tick", "setTimeout", "getFloatTimeDomainData", "sumSquares", "amplitude", "current", "Math", "sqrt", "length", "disconnect", "close", "clearInterval", "clearTimeout", "removeTrack", "PersistentLifecycle", "Trigger", "scheduleTask", "Resource", "invariant", "log", "HistoryCache", "_limit", "_messages", "limit", "push", "messages", "length", "shift", "get", "DefaultBatchSizeLimit", "FIFOScheduler", "Promise", "resolve", "schedule", "task", "reject", "then", "error", "BulkRequestDispatcher", "batchSizeLimit", "doBulkRequest", "params", "bulkRequestFunc", "length", "push", "batch", "setTimeout", "batchCopy", "splice", "result", "catch", "err", "__dxlog_file", "NETWORK_TIMEOUT", "_persistentLifecycle", "PersistentLifecycle", "start", "_startSession", "_stopSession", "session", "_config", "taskScheduler", "pushTrackDispatcher", "pullTrackDispatcher", "BulkRequestDispatcher", "closeTrackDispatcher", "config", "_open", "_close", "sessionId", "peerConnection", "_createRtcConnection", "bundlePolicy", "addEventListener", "info", "connectionState", "log", "iceTimeout", "clearTimeout", "iceConnectionState", "timeoutSeconds", "_initiateCallSession", "method", "_fetch", "endpoint", "relativePath", "type", "time", "Date", "body", "requestInit", "redirect", "response", "status", "text", "Error", "json", "data", "errorCode", "history", "error", "pushedTrackPromise", "doBulkRequest", "trackName", "transceiver", "tracks", "setLocalDescription", "offer", "stringify", "sessionDescription", "sdp", "mid", "location", "invariant", "setRemoteDescription", "RTCSessionDescription", "peerConnectionIsConnected", "trackData", "_closeTrackInBulk", "ctx", "pushTrack", "track", "previousTrack", "encodings", "getTransceivers", "verbose", "stableId", "crypto", "randomUUID", "direction", "pushedTrackData", "forEach", "encoding", "i", "existing", "parameters", "pulledTrackPromise", "newTrackResponse", "pulledTrackData", "find", "t", "acc", "resolvedTrack", "resolveTrack", "answer", "renegotiationResponse", "trackInfo", "catch", "err", "availableTracks", "pullTrack", "_pullTrackInBulk", "mids", "schedule", "activeTransceivers", "requestBody", "length", "force", "handler", "resolve", "Promise", "reject", "timeout", "setTimeout", "connectionStateChangeHandler", "removeEventListener", "undefined", "connected", "log", "__dxlog_file", "getUserMediaTrack", "firstDevice", "deviceList", "acquireTrack", "constraints", "label", "mediaStream", "navigator", "video", "deviceId", "audio", "height", "frameRate", "ms", "mediaDevices", "getDisplayMedia", "contentHint", "track", "scheduleTaskInterval", "waitForCondition", "cancelWithContext", "invariant", "__dxlog_file", "width", "canvas", "height", "canvasCtx", "drawFrame", "fillStyle", "fillRect", "ctx", "condition", "timeout", "track", "audioContextStartedPreviously", "oscillator", "createOscillator", "frequency", "setValueAtTime", "audioContext", "gainNode", "gain", "currentTime", "connect", "destination", "createMediaStreamDestination", "oscillatorStarted", "ensureOscillatorStarted", "stateChangeHandler", "cleanUpUserGestureListeners", "gesture", "userGestureEvents", "forEach", "onDispose", "disconnect", "close", "stream", "getAudioTracks", "NOT_SPEAKING_AFTER", "START_SPEAKING_THRESHOLD", "CONTINUE_SPEAKING_THRESHOLD", "MIN_EVENT_INTERVAL", "SpeakingMonitor", "Resource", "speakingChanged", "Event", "_isSpeaking", "_lastEventTime", "_deferredUpdate", "_mediaStreamTrack", "isSpeaking", "_open", "DeferredTask", "_ctx", "_emitSpeakingChanged", "timeout", "cleanup", "monitorAudioLevel", "mediaStreamTrack", "onMeasure", "vol", "audioLevelAboveThreshold", "clearTimeout", "undefined", "schedule", "setTimeout", "onDispose", "timeSinceLastEvent", "Date", "now", "timeToNextEvent", "sleep", "emit", "__dxlog_file", "VIDEO_HEIGHT", "MAX_WEB_CAM_FRAMERATE", "MAX_WEB_CAM_BITRATE", "RETRY_INTERVAL", "USE_INAUDIBLE_AUDIO", "MediaManager", "stateUpdated", "Resource", "_state", "Event", "pulledVideoStreams", "pulledAudioTracks", "_speakingMonitor", "_trackToReconcile", "_blackCanvasStreamTrack", "_inaudibleAudioStreamTrack", "_pushTracksTask", "_pullTracksTask", "undefined", "ctx", "width", "VIDEO_WIDTH", "height", "videoStream", "MediaStream", "addTrack", "_pushTracks", "DeferredTask", "_reconcilePulledMedia", "audioTrack", "stop", "videoTrack", "screenshareTrack", "peer", "open", "schedule", "Promise", "all", "Object", "values", "close", "pushedVideoTrack", "pushedAudioTrack", "pushedScreenshareTrack", "getUserMediaTrack", "videoEnabled", "removeTrack", "echoCancellation", "noiseSuppression", "autoGainControl", "sampleRate", "SpeakingMonitor", "speakingChanged", "_ctx", "getScreenshare", "contentHint", "getVideoTracks", "screenshareEnabled", "log", "trackNames", "tracksToPull", "audioTracksToClose", "entries", "filter", "key", "name", "videoStreamsToClose", "some", "currentAudioTracks", "currentVideoStreams", "map", "pullResults", "shouldRetry", "cancelWithContext", "sleep", "info", "invariant", "pushVideoResult", "maxBitrate", "updated", "pushAudioResult", "pushScreenshareResult", "trackData", "mid", "track", "mediaStream", "stream", "err", "dispose", "previousTrack", "encodings", "__dxlog_file", "callStateUpdated", "Event", "left", "media", "pulledAudioTracks", "pulledVideoStreams", "_raisedHandAtom", "Atom", "make", "get", "_stateAtom", "call", "raisedHand", "_speakingAtom", "speaking", "_joinedAtom", "joined", "_selfAtom", "self", "_tracksAtom", "_usersAtom", "users", "_mediaAtom", "_audioTracksToPlayAtom", "map", "isNonNullable", "_videoStreamAtomFamily", "_activityAtomFamily", "family", "key", "activities", "_swarmSynchronizer", "_mediaManager", "name", "setRoomId", "setSpeaking", "setRaisedHand", "setActivity", "turnAudioOn", "turnAudioOff", "turnVideoOn", "turnVideoOff", "turnScreenshareOn", "turnScreenshareOff", "_client", "config", "getOrThrow", "networkService", "NetworkService", "invariant", "open", "subscription", "halo", "_setDevice", "stateUpdated", "on", "_ctx", "state", "_onMediaStateUpdated", "close", "peers", "length", "iceServers", "apiBase", "CALLS_URL", "leave", "roomId", "_registry", "emit", "_onCallStateUpdated", "tracksToPull", "video", "user", "tracks", "audio", "screenshare", "filter", "_schedulePullTracks", "_updateState", "setTracks", "pushedVideoTrack", "pushedAudioTrack", "TrackNameCodec", "encode", "undefined", "pushedScreenshareTrack", "videoEnabled", "audioEnabled", "screenshareEnabled", "isSpeaking", "mediaStateUpdated", "_getState", "useCallback", "useOperationInvoker", "Obj", "ObservabilityOperation", "useOnTransition", "useOnEditAnalytics", "message", "textBlock", "editing", "invokePromise", "onEdit", "db", "getDatabase", "SendEvent", "name", "properties", "spaceId", "messageId", "id", "messageLength", "text", "length", "useEffect", "useState", "scheduleTask", "Context", "__dxlog_file", "useBlackCanvasStreamTrack", "useEffect", "Context", "scheduleTask", "blackCanvasStreamTrack", "createBlackCanvasStreamTrack", "ctx", "width", "height", "setBlackCanvasStreamTrack", "useEffect", "useState", "useDebugMode", "enabled", "setEnabled", "handler", "ev", "key", "toLowerCase", "ctrlKey", "preventDefault", "document", "addEventListener", "removeEventListener", "useEffect", "useState", "scheduleTask", "Context", "__dxlog_file", "useInaudibleAudioStreamTrack", "useEffect", "Context", "scheduleTask", "audioStreamTrack", "createInaudibleAudioStreamTrack", "ctx", "setAudioStreamTrack", "useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useEffect", "useRef", "useState", "useVideoStreamTrack", "videoElement", "videoSrc", "videoStreamTrack", "setVideoStreamTrack", "undefined", "hadRun", "current", "addEventListener", "stream", "captureStream", "track", "getTracks", "onaddtrack", "event", "kind", "src", "ThreadPlugin", "Plugin", "lazy", "meta"]
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"inputs":{"src/meta.ts":{"bytes":2094,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/types/capabilities.ts":{"bytes":3900,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"format":"esm"},"src/types/Settings.ts":{"bytes":876,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true}],"format":"esm"},"src/types/types.ts":{"bytes":1140,"imports":[{"path":"src/types/Settings.ts","kind":"import-statement","original":"./Settings"}],"format":"esm"},"src/types/index.ts":{"bytes":469,"imports":[{"path":"src/types/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"src/types/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/calls/types.ts":{"bytes":5446,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/calls_pb","kind":"import-statement","external":true}],"format":"esm"},"src/calls/call-swarm-synchronizer.ts":{"bytes":36873,"imports":[{"path":"md5-hex","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/calls_pb","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/edge/messenger","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/calls/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/calls/util/audio.ts":{"bytes":5758,"imports":[],"format":"esm"},"src/calls/util/history-cache.ts":{"bytes":2072,"imports":[],"format":"esm"},"src/calls/util/task-scheduling.ts":{"bytes":9141,"imports":[],"format":"esm"},"src/calls/util/calls-service.ts":{"bytes":63767,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/calls/util/history-cache.ts","kind":"import-statement","original":"./history-cache"},{"path":"src/calls/util/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"}],"format":"esm"},"src/calls/util/media.ts":{"bytes":6305,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/calls/util/stub-media-streams.ts":{"bytes":12079,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/calls/util/index.ts":{"bytes":665,"imports":[{"path":"src/calls/util/audio.ts","kind":"import-statement","original":"./audio"},{"path":"src/calls/util/calls-service.ts","kind":"import-statement","original":"./calls-service"},{"path":"src/calls/util/media.ts","kind":"import-statement","original":"./media"},{"path":"src/calls/util/stub-media-streams.ts","kind":"import-statement","original":"./stub-media-streams"}],"format":"esm"},"src/calls/speaking-monitor.ts":{"bytes":9247,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/calls/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/calls/media-manager.ts":{"bytes":47772,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/calls/speaking-monitor.ts","kind":"import-statement","original":"./speaking-monitor"},{"path":"src/calls/types.ts","kind":"import-statement","original":"./types"},{"path":"src/calls/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/calls/call-manager.ts":{"bytes":32424,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/calls/call-swarm-synchronizer.ts","kind":"import-statement","original":"./call-swarm-synchronizer"},{"path":"src/calls/media-manager.ts","kind":"import-statement","original":"./media-manager"},{"path":"src/calls/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/calls/index.ts":{"bytes":885,"imports":[{"path":"src/calls/call-manager.ts","kind":"import-statement","original":"./call-manager"},{"path":"src/calls/call-swarm-synchronizer.ts","kind":"import-statement","original":"./call-swarm-synchronizer"},{"path":"src/calls/media-manager.ts","kind":"import-statement","original":"./media-manager"},{"path":"src/calls/speaking-monitor.ts","kind":"import-statement","original":"./speaking-monitor"},{"path":"src/calls/types.ts","kind":"import-statement","original":"./types"},{"path":"src/calls/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/hooks/analytics.ts":{"bytes":3812,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useBlackCanvasStreamTrack.tsx":{"bytes":3099,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/calls/util/stub-media-streams.ts","kind":"import-statement","original":"../calls/util/stub-media-streams"}],"format":"esm"},"src/hooks/useDebugMode.ts":{"bytes":2401,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useInaudibleAudioStreamTrack.tsx":{"bytes":2890,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/calls/util/stub-media-streams.ts","kind":"import-statement","original":"../calls/util/stub-media-streams"}],"format":"esm"},"src/hooks/useStatus.ts":{"bytes":3481,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useVideoStreamTrack.tsx":{"bytes":4348,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/index.ts":{"bytes":954,"imports":[{"path":"src/hooks/analytics.ts","kind":"import-statement","original":"./analytics"},{"path":"src/hooks/useBlackCanvasStreamTrack.tsx","kind":"import-statement","original":"./useBlackCanvasStreamTrack"},{"path":"src/hooks/useDebugMode.ts","kind":"import-statement","original":"./useDebugMode"},{"path":"src/hooks/useInaudibleAudioStreamTrack.tsx","kind":"import-statement","original":"./useInaudibleAudioStreamTrack"},{"path":"src/hooks/useStatus.ts","kind":"import-statement","original":"./useStatus"},{"path":"src/hooks/useVideoStreamTrack.tsx","kind":"import-statement","original":"./useVideoStreamTrack"}],"format":"esm"},"src/index.ts":{"bytes":1703,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"src/calls/index.ts","kind":"import-statement","original":"./calls"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"#plugin","kind":"dynamic-import","external":true}],"format":"esm"},"src/blueprints/thread-blueprint.ts":{"bytes":3314,"imports":[{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#operations","kind":"import-statement","external":true}],"format":"esm"},"src/blueprints/index.ts":{"bytes":525,"imports":[{"path":"src/blueprints/thread-blueprint.ts","kind":"import-statement","original":"./thread-blueprint"}],"format":"esm"},"src/operations/definitions.ts":{"bytes":21189,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"format":"esm"},"src/operations/add-message.ts":{"bytes":10620,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/append-channel-message.ts":{"bytes":4989,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-client/types","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/create.ts":{"bytes":6161,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/create-channel.ts":{"bytes":1773,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/create-proposals.ts":{"bytes":6602,"imports":[{"path":"effect/Array","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Function","kind":"import-statement","external":true},{"path":"@dxos/assistant","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/delete.ts":{"bytes":7141,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/delete-message.ts":{"bytes":6168,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/on-create-space.ts":{"bytes":2323,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/restore.ts":{"bytes":3558,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/restore-message.ts":{"bytes":4273,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/select.ts":{"bytes":2732,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/toggle-resolved.ts":{"bytes":4205,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/index.ts":{"bytes":2201,"imports":[{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"},{"path":"src/operations/add-message.ts","kind":"dynamic-import","original":"./add-message"},{"path":"src/operations/append-channel-message.ts","kind":"dynamic-import","original":"./append-channel-message"},{"path":"src/operations/create.ts","kind":"dynamic-import","original":"./create"},{"path":"src/operations/create-channel.ts","kind":"dynamic-import","original":"./create-channel"},{"path":"src/operations/create-proposals.ts","kind":"dynamic-import","original":"./create-proposals"},{"path":"src/operations/delete.ts","kind":"dynamic-import","original":"./delete"},{"path":"src/operations/delete-message.ts","kind":"dynamic-import","original":"./delete-message"},{"path":"src/operations/on-create-space.ts","kind":"dynamic-import","original":"./on-create-space"},{"path":"src/operations/restore.ts","kind":"dynamic-import","original":"./restore"},{"path":"src/operations/restore-message.ts","kind":"dynamic-import","original":"./restore-message"},{"path":"src/operations/select.ts","kind":"dynamic-import","original":"./select"},{"path":"src/operations/toggle-resolved.ts","kind":"dynamic-import","original":"./toggle-resolved"}],"format":"esm"},"src/translations.ts":{"bytes":11326,"imports":[{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/lib/browser/toggle-resolved-JD3D4WBZ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2053},"dist/lib/browser/toggle-resolved-JD3D4WBZ.mjs":{"imports":[{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/toggle-resolved.ts","inputs":{"src/operations/toggle-resolved.ts":{"bytesInOutput":1104}},"bytes":1333},"dist/lib/browser/create-channel-ZXKSLHGN.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":961},"dist/lib/browser/create-channel-ZXKSLHGN.mjs":{"imports":[{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create-channel.ts","inputs":{"src/operations/create-channel.ts":{"bytesInOutput":306}},"bytes":531},"dist/lib/browser/create-proposals-AV5CREPV.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3589},"dist/lib/browser/create-proposals-AV5CREPV.mjs":{"imports":[{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Array","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Function","kind":"import-statement","external":true},{"path":"@dxos/assistant","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create-proposals.ts","inputs":{"src/operations/create-proposals.ts":{"bytesInOutput":1523}},"bytes":1756},"dist/lib/browser/delete-GLYEP7NE.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3898},"dist/lib/browser/delete-GLYEP7NE.mjs":{"imports":[{"path":"dist/lib/browser/chunk-E4GG3NX2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/delete.ts","inputs":{"src/operations/delete.ts":{"bytesInOutput":1480}},"bytes":1735},"dist/lib/browser/delete-message-RQ72ZY5D.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3018},"dist/lib/browser/delete-message-RQ72ZY5D.mjs":{"imports":[{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/delete-message.ts","inputs":{"src/operations/delete-message.ts":{"bytesInOutput":1496}},"bytes":1731},"dist/lib/browser/on-create-space-SPE3QVFZ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1283},"dist/lib/browser/on-create-space-SPE3QVFZ.mjs":{"imports":[{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/on-create-space.ts","inputs":{"src/operations/on-create-space.ts":{"bytesInOutput":417}},"bytes":662},"dist/lib/browser/restore-VX7FLZOZ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1937},"dist/lib/browser/restore-VX7FLZOZ.mjs":{"imports":[{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/restore.ts","inputs":{"src/operations/restore.ts":{"bytesInOutput":698}},"bytes":896},"dist/lib/browser/restore-message-D65NSWUA.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2195},"dist/lib/browser/restore-message-D65NSWUA.mjs":{"imports":[{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/restore-message.ts","inputs":{"src/operations/restore-message.ts":{"bytesInOutput":1069}},"bytes":1298},"dist/lib/browser/select-AT4L7EBU.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1484},"dist/lib/browser/select-AT4L7EBU.mjs":{"imports":[{"path":"dist/lib/browser/chunk-E4GG3NX2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/select.ts","inputs":{"src/operations/select.ts":{"bytesInOutput":528}},"bytes":783},"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":120905},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-E4GG3NX2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"md5-hex","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/calls_pb","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/edge/messenger","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/calls_pb","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"#plugin","kind":"dynamic-import","external":true}],"exports":["CALLS_URL","CallManager","CallSwarmSynchronizer","CallsServicePeer","MediaManager","SpeakingMonitor","THREAD_ITEM","ThreadCapabilities","ThreadPlugin","TrackNameCodec","codec","createBlackCanvasStreamTrack","createInaudibleAudioStreamTrack","getDeviceList","getScreenshare","getUserMediaTrack","meta","monitorAudioLevel","useBlackCanvasStreamTrack","useDebugMode","useInaudibleAudioStreamTrack","useOnEditAnalytics","useStatus","useVideoStreamTrack"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":109},"src/meta.ts":{"bytesInOutput":492},"src/calls/call-manager.ts":{"bytesInOutput":8225},"src/calls/call-swarm-synchronizer.ts":{"bytesInOutput":9413},"src/calls/types.ts":{"bytesInOutput":1234},"src/calls/media-manager.ts":{"bytesInOutput":12364},"src/calls/speaking-monitor.ts":{"bytesInOutput":2134},"src/calls/util/audio.ts":{"bytesInOutput":1264},"src/calls/util/index.ts":{"bytesInOutput":0},"src/calls/util/calls-service.ts":{"bytesInOutput":15654},"src/calls/util/history-cache.ts":{"bytesInOutput":325},"src/calls/util/task-scheduling.ts":{"bytesInOutput":1575},"src/calls/util/media.ts":{"bytesInOutput":1498},"src/calls/util/stub-media-streams.ts":{"bytesInOutput":3071},"src/calls/index.ts":{"bytesInOutput":0},"src/hooks/analytics.ts":{"bytesInOutput":891},"src/hooks/index.ts":{"bytesInOutput":0},"src/hooks/useBlackCanvasStreamTrack.tsx":{"bytesInOutput":838},"src/hooks/useDebugMode.ts":{"bytesInOutput":511},"src/hooks/useInaudibleAudioStreamTrack.tsx":{"bytesInOutput":799},"src/hooks/useStatus.ts":{"bytesInOutput":777},"src/hooks/useVideoStreamTrack.tsx":{"bytesInOutput":968}},"bytes":63556},"dist/lib/browser/blueprints/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1656},"dist/lib/browser/blueprints/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#operations","kind":"import-statement","external":true}],"exports":["ThreadBlueprint"],"entryPoint":"src/blueprints/index.ts","inputs":{"src/blueprints/thread-blueprint.ts":{"bytesInOutput":900},"src/blueprints/index.ts":{"bytesInOutput":0}},"bytes":1064},"dist/lib/browser/operations/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1142},"dist/lib/browser/operations/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"dist/lib/browser/add-message-LRVGIHDH.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/append-channel-message-CO3M6FSA.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/create-BTGLHLBA.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/create-channel-ZXKSLHGN.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/create-proposals-AV5CREPV.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/delete-GLYEP7NE.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/delete-message-RQ72ZY5D.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/on-create-space-SPE3QVFZ.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/restore-VX7FLZOZ.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/restore-message-D65NSWUA.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/select-AT4L7EBU.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/toggle-resolved-JD3D4WBZ.mjs","kind":"dynamic-import"}],"exports":["ThreadOperation","ThreadOperationHandlerSet"],"entryPoint":"src/operations/index.ts","inputs":{"src/operations/index.ts":{"bytesInOutput":666}},"bytes":906},"dist/lib/browser/translations.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5140},"dist/lib/browser/translations.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"exports":["translations"],"entryPoint":"src/translations.ts","inputs":{"src/translations.ts":{"bytesInOutput":3638}},"bytes":3762},"dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/types/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-E4GG3NX2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"}],"exports":["Settings","ThreadCapabilities"],"entryPoint":"src/types/index.ts","inputs":{},"bytes":214},"dist/lib/browser/add-message-LRVGIHDH.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5119},"dist/lib/browser/add-message-LRVGIHDH.mjs":{"imports":[{"path":"dist/lib/browser/chunk-E4GG3NX2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/add-message.ts","inputs":{"src/operations/add-message.ts":{"bytesInOutput":2589}},"bytes":2863},"dist/lib/browser/append-channel-message-CO3M6FSA.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2537},"dist/lib/browser/append-channel-message-CO3M6FSA.mjs":{"imports":[{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-client/types","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/append-channel-message.ts","inputs":{"src/operations/append-channel-message.ts":{"bytesInOutput":1371}},"bytes":1627},"dist/lib/browser/create-BTGLHLBA.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3339},"dist/lib/browser/create-BTGLHLBA.mjs":{"imports":[{"path":"dist/lib/browser/chunk-E4GG3NX2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-TPNZ43NB.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create.ts","inputs":{"src/operations/create.ts":{"bytesInOutput":1373}},"bytes":1638},"dist/lib/browser/chunk-E4GG3NX2.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2736},"dist/lib/browser/chunk-E4GG3NX2.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true}],"exports":["Settings_exports","ThreadCapabilities"],"inputs":{"src/types/capabilities.ts":{"bytesInOutput":625},"src/types/index.ts":{"bytesInOutput":0},"src/types/Settings.ts":{"bytesInOutput":178},"src/types/types.ts":{"bytesInOutput":0}},"bytes":1008},"dist/lib/browser/chunk-TPNZ43NB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10206},"dist/lib/browser/chunk-TPNZ43NB.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"exports":["AddMessage","AppendChannelMessage","Create","CreateChannel","CreateProposals","Delete","DeleteMessage","OnCreateSpace","Restore","RestoreMessage","Select","ToggleResolved","definitions_exports"],"inputs":{"src/operations/definitions.ts":{"bytesInOutput":5952}},"bytes":6301},"dist/lib/browser/chunk-J5LGTIGS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/chunk-J5LGTIGS.mjs":{"imports":[],"exports":["__export"],"inputs":{},"bytes":235}}}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/operations/on-create-space.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\n\nimport { CreateChannel, OnCreateSpace } from './definitions';\n\nconst handler: Operation.WithHandler<typeof OnCreateSpace> = OnCreateSpace.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ space, isDefault }) {\n if (isDefault) {\n return;\n }\n\n const { object: channel } = yield* Operation.invoke(CreateChannel, {\n name: 'General',\n spaceId: space.id,\n });\n space.db.add(channel);\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,iBAAiB;AAI1B,IAAMC,UAAuDC,cAAcC,KACzEC,UAAUC,YACDC,kBAAW,WAAW,EAAEC,OAAOC,UAAS,GAAE;AAC/C,MAAIA,WAAW;AACb;EACF;AAEA,QAAM,EAAEC,QAAQC,QAAO,IAAK,OAAON,UAAUO,OAAOC,eAAe;IACjEC,MAAM;IACNC,SAASP,MAAMQ;EACjB,CAAA;AACAR,QAAMS,GAAGC,IAAIP,OAAAA;AACf,CAAA,CAAA,CAAA;AAIJ,IAAA,0BAAeT;",
|
|
6
|
-
"names": ["Effect", "Operation", "handler", "OnCreateSpace", "pipe", "Operation", "withHandler", "fnUntraced", "space", "isDefault", "object", "channel", "invoke", "CreateChannel", "name", "spaceId", "id", "db", "add"]
|
|
7
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
definitions_exports
|
|
3
|
-
} from "../chunk-TPNZ43NB.mjs";
|
|
4
|
-
import "../chunk-J5LGTIGS.mjs";
|
|
5
|
-
|
|
6
|
-
// src/operations/index.ts
|
|
7
|
-
import { OperationHandlerSet } from "@dxos/compute";
|
|
8
|
-
var ThreadOperationHandlerSet = OperationHandlerSet.lazy(() => import("../add-message-LRVGIHDH.mjs"), () => import("../append-channel-message-CO3M6FSA.mjs"), () => import("../create-BTGLHLBA.mjs"), () => import("../create-channel-ZXKSLHGN.mjs"), () => import("../create-proposals-AV5CREPV.mjs"), () => import("../delete-GLYEP7NE.mjs"), () => import("../delete-message-RQ72ZY5D.mjs"), () => import("../on-create-space-SPE3QVFZ.mjs"), () => import("../restore-VX7FLZOZ.mjs"), () => import("../restore-message-D65NSWUA.mjs"), () => import("../select-AT4L7EBU.mjs"), () => import("../toggle-resolved-JD3D4WBZ.mjs"));
|
|
9
|
-
export {
|
|
10
|
-
definitions_exports as ThreadOperation,
|
|
11
|
-
ThreadOperationHandlerSet
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/operations/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport * as ThreadOperation from './definitions';\n\nexport const ThreadOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./add-message'),\n () => import('./append-channel-message'),\n () => import('./create'),\n () => import('./create-channel'),\n () => import('./create-proposals'),\n () => import('./delete'),\n () => import('./delete-message'),\n () => import('./on-create-space'),\n () => import('./restore'),\n () => import('./restore-message'),\n () => import('./select'),\n () => import('./toggle-resolved'),\n);\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,SAASA,2BAA2B;AAI7B,IAAMC,4BAA4BD,oBAAoBE,KAC3D,MAAM,OAAO,6BAAA,GACb,MAAM,OAAO,wCAAA,GACb,MAAM,OAAO,wBAAA,GACb,MAAM,OAAO,gCAAA,GACb,MAAM,OAAO,kCAAA,GACb,MAAM,OAAO,wBAAA,GACb,MAAM,OAAO,gCAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,yBAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,wBAAA,GACb,MAAM,OAAO,iCAAA,CAAA;",
|
|
6
|
-
"names": ["OperationHandlerSet", "ThreadOperationHandlerSet", "lazy"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/operations/restore.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { sleep } from '@dxos/async';\nimport { Operation } from '@dxos/compute';\nimport { Obj } from '@dxos/echo';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/operations';\n\nimport { Restore } from './definitions';\n\nconst handler: Operation.WithHandler<typeof Restore> = Restore.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ thread, anchor }) {\n const db = Obj.getDatabase(thread);\n if (!db) {\n return;\n }\n\n // TODO(wittjosiah): Without sleep, rendering crashes at `Relation.setSource(anchor)`.\n db.add(thread);\n yield* Effect.promise(() => sleep(100));\n db.add(anchor);\n\n yield* Operation.schedule(ObservabilityOperation.SendEvent, {\n name: 'threads.undo-delete',\n properties: {\n spaceId: db.spaceId,\n threadId: thread.id,\n },\n });\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,aAAa;AACtB,SAASC,iBAAiB;AAC1B,SAASC,WAAW;AACpB,SAASC,8BAA8B;AAIvC,IAAMC,UAAiDC,QAAQC,KAC7DC,UAAUC,YACDC,kBAAW,WAAW,EAAEC,QAAQC,OAAM,GAAE;AAC7C,QAAMC,KAAKC,IAAIC,YAAYJ,MAAAA;AAC3B,MAAI,CAACE,IAAI;AACP;EACF;AAGAA,KAAGG,IAAIL,MAAAA;AACP,SAAcM,eAAQ,MAAMC,MAAM,GAAA,CAAA;AAClCL,KAAGG,IAAIJ,MAAAA;AAEP,SAAOJ,UAAUW,SAASC,uBAAuBC,WAAW;IAC1DC,MAAM;IACNC,YAAY;MACVC,SAASX,GAAGW;MACZC,UAAUd,OAAOe;IACnB;EACF,CAAA;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,kBAAerB;",
|
|
6
|
-
"names": ["Effect", "sleep", "Operation", "Obj", "ObservabilityOperation", "handler", "Restore", "pipe", "Operation", "withHandler", "fnUntraced", "thread", "anchor", "db", "Obj", "getDatabase", "add", "promise", "sleep", "schedule", "ObservabilityOperation", "SendEvent", "name", "properties", "spaceId", "threadId", "id"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/operations/restore-message.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Obj, Ref, Relation } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/operations';\nimport { Thread } from '@dxos/types';\n\nimport { RestoreMessage } from './definitions';\n\nconst handler: Operation.WithHandler<typeof RestoreMessage> = RestoreMessage.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ anchor, message, messageIndex }) {\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const db = Obj.getDatabase(thread);\n invariant(db, 'Database not found');\n\n Obj.update(thread, (thread) => {\n thread.messages.splice(messageIndex, 0, Ref.make(message));\n });\n\n yield* Operation.schedule(ObservabilityOperation.SendEvent, {\n name: 'threads.message.undo-delete',\n properties: {\n spaceId: db.spaceId,\n threadId: thread.id,\n messageId: message.id,\n },\n });\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,iBAAiB;AAC1B,SAASC,KAAKC,KAAKC,gBAAgB;AACnC,SAASC,iBAAiB;AAC1B,SAASC,8BAA8B;AAKvC,IAAA,eAA8DC;IAIxD,UAAWC,eAAgBC,KAAAA,UAAAA,YAAAA,kBAAAA,WAAAA,EAAAA,QAAAA,SAAAA,aAAAA,GAAAA;AAC3BC,QAAAA,SAAc,SAAA,UAAA,MAAA;AAEdF,QAAIG,KAAOF,IAAAA,YAASA,MAAAA;YAClBA,IAAOG,sBAAgBC,EAAAA,YAAiBC,YAASC,GAAAA,cAAAA,GAAAA,IAAAA,GAAAA,MAAAA,GAAAA,CAAAA,MAAAA,sBAAAA,EAAAA,CAAAA;AACnD,MAAA,OAAA,QAAA,CAAAN,YAAA;AAEA,IAAAA,QAAOO,SAAUC,OAASC,cAAAA,GAAAA,IAAAA,KAAuBC,OAAW,CAAA;;SAE1DC,UAAY,SAAA,uBAAA,WAAA;UACVC;gBACAC;MACAC,SAAAA,GAAWR;MACb,UAAA,OAAA;MACF,WAAA,QAAA;IACF;EAIJ,CAAA;;;",
|
|
6
|
-
"names": ["Effect", "Operation", "Obj", "Ref", "Relation", "invariant", "ObservabilityOperation", "RestoreMessage", "Obj", "thread", "invariant", "update", "messages", "messageIndex", "Ref", "message", "Operation", "schedule", "ObservabilityOperation", "SendEvent", "properties", "spaceId", "threadId", "messageId"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/operations/select.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\n\nimport { ThreadCapabilities } from '../types';\nimport { Select } from './definitions';\n\nconst handler: Operation.WithHandler<typeof Select> = Select.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n const stateAtom = yield* Capability.get(ThreadCapabilities.State);\n const current = registry.get(stateAtom);\n registry.set(stateAtom, { ...current, current: input.current });\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,iBAAiB;AAK1B,IAAMC,UAAgDC,OAAOC,KAC3DC,UAAUC,YACDC,kBAAW,WAAWC,OAAK;AAChC,QAAMC,WAAW,OAAOC,WAAWC,IAAIC,aAAaC,YAAY;AAChE,QAAMC,YAAY,OAAOJ,WAAWC,IAAII,mBAAmBC,KAAK;AAChE,QAAMC,UAAUR,SAASE,IAAIG,SAAAA;AAC7BL,WAASS,IAAIJ,WAAW;IAAE,GAAGG;IAASA,SAAST,MAAMS;EAAQ,CAAA;AAC/D,CAAA,CAAA,CAAA;AAIJ,IAAA,iBAAef;",
|
|
6
|
-
"names": ["Effect", "Capabilities", "Capability", "Operation", "handler", "Select", "pipe", "Operation", "withHandler", "fnUntraced", "input", "registry", "Capability", "get", "Capabilities", "AtomRegistry", "stateAtom", "ThreadCapabilities", "State", "current", "set"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/operations/toggle-resolved.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/operations';\n\nimport { ToggleResolved } from './definitions';\n\nconst handler: Operation.WithHandler<typeof ToggleResolved> = ToggleResolved.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const thread = input.thread;\n\n Obj.update(thread, (thread) => {\n if (thread.status === 'active' || thread.status === undefined) {\n thread.status = 'resolved';\n } else if (thread.status === 'resolved') {\n thread.status = 'active';\n }\n });\n\n const db = Obj.getDatabase(thread);\n invariant(db, 'Database not found');\n\n yield* Operation.schedule(ObservabilityOperation.SendEvent, {\n name: 'threads.toggle-resolved',\n properties: {\n spaceId: db.spaceId,\n threadId: thread.id,\n },\n });\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,iBAAiB;AAC1B,SAASC,WAAW;AACpB,SAASC,iBAAiB;AAC1B,SAASC,8BAA8B;AAIvC,IAAA,eAA8DC;IAKxDC,UAAWC,eAASA,KAAAA,UAAAA,YAAAA,kBAAAA,WAAAA,OAAAA;QAClB,SAAWC,MAAM;aACfD,QAAOC,CAAAA,YAAS;AAClB,QAAAD,QAAWA,WAAOC,YAAWD,QAAY,WAAA,QAAA;AACvCA,MAAAA,QAAOC,SAAS;IAClB,WAAAD,QAAA,WAAA,YAAA;AACF,MAAAA,QAAA,SAAA;IAEA;EACAE,CAAAA;AAEA,QAAA,KAAOC,IAAAA,YAAmBC,MAAAA;YAClB,IAAA,sBAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,MAAA,sBAAA,EAAA,CAAA;SACNC,UAAY,SAAA,uBAAA,WAAA;UACVC;gBACAC;MACF,SAAA,GAAA;MACF,UAAA,OAAA;IACF;EAIJ,CAAA;;;",
|
|
6
|
-
"names": ["Effect", "Operation", "Obj", "invariant", "ObservabilityOperation", "ToggleResolved", "Obj", "thread", "status", "invariant", "Operation", "ObservabilityOperation", "properties", "spaceId", "threadId"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/translations.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Type } from '@dxos/echo';\nimport { type Resource } from '@dxos/react-ui';\nimport { Channel } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nexport const translations = [\n {\n 'en-US': {\n [Type.getTypename(Channel.Channel)]: {\n 'typename.label': 'Channel',\n 'typename.label_zero': 'Channels',\n 'typename.label_one': 'Channel',\n 'typename.label_other': 'Channels',\n 'object-name.placeholder': 'New channel',\n 'add-object.label': 'Add channel',\n 'rename-object.label': 'Rename channel',\n 'delete-object.label': 'Delete channel',\n 'object-deleted.label': 'Channel deleted',\n },\n [meta.id]: {\n 'plugin.name': 'Chat',\n 'channel-title.label': 'Title',\n 'message.placeholder': 'Reply…',\n 'activity.message': 'Processing…',\n 'anonymous.label': 'Anonymous',\n 'delete-message-block.label': 'Delete message block',\n 'detached-thread.label': 'Referenced content was removed',\n 'delete-thread.label': 'Delete thread',\n 'resolve-thread.label': 'Resolve thread',\n 'thread-deleted.label': 'Thread deleted',\n 'message-deleted.label': 'Message deleted',\n 'comments.heading': 'Comments',\n 'chat.heading': 'Chat',\n 'draft.button': 'DRAFT',\n 'no-comments.title': 'Comments',\n 'no-comments.message':\n 'Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.',\n 'toggle-show-resolved.label': 'Show resolved',\n 'unnamed-object-threads.label': 'Threads',\n 'mark-as-resolved.label': 'Mark as resolved',\n 'mark-as-unresolved.label': 'Mark as unresolved',\n 'save-message.label': 'Save',\n 'edit-message.label': 'Edit',\n 'delete-message.label': 'Delete message',\n 'accept-proposal.label': 'Accept proposal',\n 'open-comments-panel.label': 'Show Comments',\n 'comments.label': 'Comments',\n 'show-all.label': 'All comments',\n 'show-unresolved.label': 'Unresolved comments',\n 'add-comment.label': 'Add comment',\n\n 'channel-companion.label': 'Channel',\n 'call-panel.label': 'Active Call',\n\n 'display-name.label': 'Display name',\n 'display-name.description': 'Set your display name before joining a meeting.',\n 'display-name-input.placeholder': 'Enter your name',\n 'set-display-name.label': 'Continue',\n\n 'call-tab.label': 'Call',\n 'meeting-status.title': 'Calls',\n 'share-meeting-link.label': 'Share meeting',\n 'show-webrtc-stats.title': 'WebRTC Stats',\n 'show-calls-history.title': 'Service History',\n\n 'meeting-summary.label': 'Summary',\n 'summarize.label': 'Summarize',\n 'summarizing.label': 'Creating summary...',\n 'create-summary.message': 'A summary doesn’t exist for this meeting yet. Create one now?',\n\n 'icon-pin.label': 'Pin video',\n 'icon-unpin.label': 'Unpin video',\n 'icon-wave.label': 'Waving',\n 'icon-muted.label': 'Muted',\n 'join-call.button': 'Join',\n 'leave-call.button': 'Leave',\n 'mic-on.button': 'Unmute',\n 'mic-off.button': 'Mute',\n 'camera-on.button': 'Turn camera on',\n 'camera-off.button': 'Turn camera off',\n 'camera-off.label': 'Camera off',\n 'raise-hand.button': 'Raise hand',\n 'lower-hand.button': 'Lower hand',\n 'screenshare-on.button': 'Share screen',\n 'screenshare-off.button': 'Stop streaming',\n\n 'channel-toolbar.title': 'Channel actions',\n 'start-video-call.menu': 'Start video call',\n },\n },\n },\n] as const satisfies Resource[];\n"],
|
|
5
|
-
"mappings": ";;;AAIA,SAASA,YAAY;AAErB,SAASC,eAAe;AAExB,SAASC,YAAY;AAEd,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACH,KAAKI,YAAYH,QAAQA,OAAO,CAAA,GAAI;QACnC,kBAAkB;QAClB,uBAAuB;QACvB,sBAAsB;QACtB,wBAAwB;QACxB,2BAA2B;QAC3B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB;QACvB,wBAAwB;MAC1B;MACA,CAACC,KAAKG,EAAE,GAAG;QACT,eAAe;QACf,uBAAuB;QACvB,uBAAuB;QACvB,oBAAoB;QACpB,mBAAmB;QACnB,8BAA8B;QAC9B,yBAAyB;QACzB,uBAAuB;QACvB,wBAAwB;QACxB,wBAAwB;QACxB,yBAAyB;QACzB,oBAAoB;QACpB,gBAAgB;QAChB,gBAAgB;QAChB,qBAAqB;QACrB,uBACE;QACF,8BAA8B;QAC9B,gCAAgC;QAChC,0BAA0B;QAC1B,4BAA4B;QAC5B,sBAAsB;QACtB,sBAAsB;QACtB,wBAAwB;QACxB,yBAAyB;QACzB,6BAA6B;QAC7B,kBAAkB;QAClB,kBAAkB;QAClB,yBAAyB;QACzB,qBAAqB;QAErB,2BAA2B;QAC3B,oBAAoB;QAEpB,sBAAsB;QACtB,4BAA4B;QAC5B,kCAAkC;QAClC,0BAA0B;QAE1B,kBAAkB;QAClB,wBAAwB;QACxB,4BAA4B;QAC5B,2BAA2B;QAC3B,4BAA4B;QAE5B,yBAAyB;QACzB,mBAAmB;QACnB,qBAAqB;QACrB,0BAA0B;QAE1B,kBAAkB;QAClB,oBAAoB;QACpB,mBAAmB;QACnB,oBAAoB;QACpB,oBAAoB;QACpB,qBAAqB;QACrB,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,qBAAqB;QACrB,oBAAoB;QACpB,qBAAqB;QACrB,qBAAqB;QACrB,yBAAyB;QACzB,0BAA0B;QAE1B,yBAAyB;QACzB,yBAAyB;MAC3B;IACF;EACF;;",
|
|
6
|
-
"names": ["Type", "Channel", "meta", "translations", "getTypename", "id"]
|
|
7
|
-
}
|