@3sln/trove 0.0.17 → 0.0.18
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/package.json +1 -1
- package/packages/core/src/plugins/runtime.js +61 -5
- package/packages/core/src/sidecar/document.js +60 -2
- package/packages/core/src/sidecar/index.js +28 -1
- package/packages/plugin-sdk/src/browser.js +257 -26
- package/packages/plugin-sdk/src/protocol.js +9 -0
- package/packages/server/src/routes.js +74 -0
- package/packages/web/dist/assets/main-b9jd0fyt.js +742 -0
- package/packages/web/dist/assets/{main-wpfmmbfd.js.map → main-b9jd0fyt.js.map} +12 -11
- package/packages/web/dist/index.html +1 -1
- package/packages/web/dist/sw.js +33 -3
- package/packages/web/src/bl/fileType.js +8 -0
- package/packages/web/src/bl/launcher.js +15 -0
- package/packages/web/src/platform/index.js +8 -0
- package/packages/web/src/platform/itemData.js +161 -0
- package/packages/web/src/platform/navigation.js +16 -2
- package/packages/web/src/platform/pluginRpc.js +55 -0
- package/packages/web/src/ui/components/launcher.js +1 -1
- package/packages/web/src/ui/components/views/index.js +14 -1
- package/packages/web/dist/assets/main-wpfmmbfd.js +0 -511
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../node_modules/@3sln/dodo/src/vdom.js", "../../../node_modules/@3sln/dodo/src/html.js", "../../../node_modules/@3sln/dodo/src/scheduler.js", "../../../node_modules/@3sln/dodo/index.js", "../../../node_modules/@3sln/dodo/src/settings.js", "../../../node_modules/@3sln/dodo/src/reactive.js", "../../../node_modules/@3sln/dodo/reactive.js", "../src/runtime.js", "../../core/src/errors.js", "../../core/src/util.js", "../../core/src/plugins/identity.js", "../../core/src/plugins/contributions.js", "../src/platform/contributions.js", "../src/platform/whenclause.js", "../src/platform/context.js", "../src/dispatch.js", "../src/platform/commands.js", "../src/platform/keybindings.js", "../src/platform/settings.js", "../src/platform/notifications.js", "../../core/src/retry.js", "../src/platform/api.js", "../../../node_modules/fflate/esm/browser.js", "../src/platform/pluginStore.js", "../src/platform/pluginClientDb.js", "../src/platform/pluginSigning.js", "../src/platform/pluginNet.js", "../src/platform/pluginPackage.js", "../src/platform/pluginMedia.js", "../src/platform/pluginDock.js", "../../../node_modules/@3sln/ngin/src/internal.js", "../../../node_modules/@3sln/ngin/src/providers.js", "../../../node_modules/@3sln/ngin/src/actions.js", "../../../node_modules/@3sln/ngin/src/queries.js", "../../../node_modules/@3sln/ngin/src/engine.js", "../src/bl/viewState.js", "../src/bl/trust.js", "../src/bl/pluginInstall.js", "../../core/src/search/tagMatch.js", "../src/bl/tagQuery.js", "../src/bl/fileType.js", "../src/bl/openers.js", "../../core/src/links.js", "../src/bl/services.js", "../src/platform/pickers.js", "../src/bl/state.js", "../src/bl/actions.js", "../../plugin-sdk/src/rpc.js", "../../plugin-sdk/src/protocol.js", "../../../node_modules/es-module-lexer/dist/lexer.js", "../src/platform/pluginModules.js", "../src/platform/pluginFrames.js", "../../core/src/plugins/sql.js", "../src/platform/pluginRpc.js", "../../core/src/plugins/package.js", "../src/platform/pluginHost.js", "../src/platform/viewport.js", "../src/platform/spatialNav.js", "../src/platform/voice.js", "../src/platform/voiceSearch.js", "../src/platform/mediaUrls.js", "../src/platform/fileChunks.js", "../src/platform/index.js", "../src/bl/context.js", "../src/platform/navigation.js", "../src/bl/social.js", "../../core/src/search/embeddings.js", "../../core/src/indexers/registry.js", "../../core/src/search/keywordStore.js", "../src/bl/offline.js", "../src/bl/activity.js", "../src/bl/commands.js", "../src/bl/index.js", "../src/bl/watchQuery.js", "../src/ui/region.js", "../src/bl/intern.js", "../src/bl/match.js", "../src/bl/status.js", "../src/bl/launcher.js", "../src/bl/views.js", "../src/bl/queries.js", "../src/ui/icon.js", "../src/ui/format.js", "../src/bl/mentions.js", "../src/ui/components/social.js", "../src/ui/components/activityBar.js", "../src/ui/sanitize.js", "../src/ui/components/statusBar.js", "../src/ui/activate.js", "../src/ui/components/views/parts.js", "../src/ui/components/views/list.js", "../src/ui/media.js", "../src/ui/components/views/grid.js", "../src/ui/components/views/index.js", "../src/ui/components/launcher.js", "../src/ui/components/settingsView.js", "../src/ui/components/collectionGate.js", "../src/ui/components/pluginsView.js", "../src/ui/components/adminView.js", "../src/bl/links.js", "../src/ui/components/openers/markdown.js", "../src/ui/components/openers/index.js", "../src/ui/components/editorArea.js", "../src/ui/components/commandPalette.js", "../src/ui/components/pluginReview.js", "../src/ui/components/overlays.js", "../src/ui/components/activityPanel.js", "../src/ui/components/phoneChrome.js", "../src/ui/compositions/workbench.js", "../src/workbench.js", "../src/main.js"],
|
|
3
|
+
"sources": ["../../../node_modules/@3sln/dodo/src/vdom.js", "../../../node_modules/@3sln/dodo/src/html.js", "../../../node_modules/@3sln/dodo/src/scheduler.js", "../../../node_modules/@3sln/dodo/index.js", "../../../node_modules/@3sln/dodo/src/settings.js", "../../../node_modules/@3sln/dodo/src/reactive.js", "../../../node_modules/@3sln/dodo/reactive.js", "../src/runtime.js", "../../core/src/errors.js", "../../core/src/util.js", "../../core/src/plugins/identity.js", "../../core/src/plugins/contributions.js", "../src/platform/contributions.js", "../src/platform/whenclause.js", "../src/platform/context.js", "../src/dispatch.js", "../src/platform/commands.js", "../src/platform/keybindings.js", "../src/platform/settings.js", "../src/platform/notifications.js", "../../core/src/retry.js", "../src/platform/api.js", "../../../node_modules/fflate/esm/browser.js", "../src/platform/pluginStore.js", "../src/platform/pluginClientDb.js", "../src/platform/pluginSigning.js", "../src/platform/pluginNet.js", "../src/platform/pluginPackage.js", "../src/platform/pluginMedia.js", "../src/platform/pluginDock.js", "../../../node_modules/@3sln/ngin/src/internal.js", "../../../node_modules/@3sln/ngin/src/providers.js", "../../../node_modules/@3sln/ngin/src/actions.js", "../../../node_modules/@3sln/ngin/src/queries.js", "../../../node_modules/@3sln/ngin/src/engine.js", "../src/bl/viewState.js", "../src/bl/trust.js", "../src/bl/pluginInstall.js", "../../core/src/search/tagMatch.js", "../src/bl/tagQuery.js", "../src/bl/fileType.js", "../src/bl/openers.js", "../../core/src/links.js", "../src/bl/services.js", "../src/platform/pickers.js", "../src/bl/state.js", "../src/bl/actions.js", "../../plugin-sdk/src/rpc.js", "../../plugin-sdk/src/protocol.js", "../../../node_modules/es-module-lexer/dist/lexer.js", "../src/platform/pluginModules.js", "../src/platform/pluginFrames.js", "../../core/src/plugins/sql.js", "../src/platform/pluginRpc.js", "../../core/src/plugins/package.js", "../src/platform/pluginHost.js", "../src/platform/viewport.js", "../src/platform/spatialNav.js", "../src/platform/voice.js", "../src/platform/voiceSearch.js", "../src/platform/mediaUrls.js", "../src/platform/itemData.js", "../src/platform/fileChunks.js", "../src/platform/index.js", "../src/bl/context.js", "../src/platform/navigation.js", "../src/bl/social.js", "../../core/src/search/embeddings.js", "../../core/src/indexers/registry.js", "../../core/src/search/keywordStore.js", "../src/bl/offline.js", "../src/bl/activity.js", "../src/bl/commands.js", "../src/bl/index.js", "../src/bl/watchQuery.js", "../src/ui/region.js", "../src/bl/intern.js", "../src/bl/match.js", "../src/bl/status.js", "../src/bl/launcher.js", "../src/bl/views.js", "../src/bl/queries.js", "../src/ui/icon.js", "../src/ui/format.js", "../src/bl/mentions.js", "../src/ui/components/social.js", "../src/ui/components/activityBar.js", "../src/ui/sanitize.js", "../src/ui/components/statusBar.js", "../src/ui/activate.js", "../src/ui/components/views/parts.js", "../src/ui/components/views/list.js", "../src/ui/media.js", "../src/ui/components/views/grid.js", "../src/ui/components/views/index.js", "../src/ui/components/launcher.js", "../src/ui/components/settingsView.js", "../src/ui/components/collectionGate.js", "../src/ui/components/pluginsView.js", "../src/ui/components/adminView.js", "../src/bl/links.js", "../src/ui/components/openers/markdown.js", "../src/ui/components/openers/index.js", "../src/ui/components/editorArea.js", "../src/ui/components/commandPalette.js", "../src/ui/components/pluginReview.js", "../src/ui/components/overlays.js", "../src/ui/components/activityPanel.js", "../src/ui/components/phoneChrome.js", "../src/ui/compositions/workbench.js", "../src/workbench.js", "../src/main.js"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"const ELEMENT_NODE = Symbol('ELEMENT_NODE');\nconst ALIAS_NODE = Symbol('ALIAS_NODE');\nconst SPECIAL_NODE = Symbol('SPECIAL_NODE');\nconst OPAQUE_NODE = Symbol('OPAQUE_NODE');\nconst NODE_STATE = Symbol('NODE_STATE');\nconst HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n\n// Property names that must never be written through to a DOM node: assigning\n// `__proto__` swaps the node's prototype, which corrupts the element for every\n// later operation. Relevant whenever props are built from untrusted data.\nconst UNSAFE_PROP_NAMES = new Set(['__proto__', 'constructor', 'prototype']);\n\nconst hasOwn = (o, k) => Object.prototype.hasOwnProperty.call(o, k);\n\n// HTML tag names come back from the DOM upper cased while SVG/MathML keep their\n// authored case. A plain case-insensitive compare covers both, and unlike\n// `localeCompare` it neither builds a collator nor depends on the host locale.\nfunction sameTagName(nodeName, tag) {\n return typeof tag === 'string' && nodeName.toLowerCase() === tag.toLowerCase();\n}\n\nclass VNode {\n constructor(type, tag, args) {\n this.type = type;\n this.tag = tag;\n this.args = args;\n }\n\n key(k) {\n this.k = k;\n return this;\n }\n\n on(hooks) {\n this.hooks = hooks;\n return this;\n }\n\n opaque() {\n if (this.type !== ELEMENT_NODE) {\n throw new Error('.opaque() can only be used on element nodes (h).');\n }\n this.type = OPAQUE_NODE;\n return this;\n }\n}\n\nfunction defaultShouldUpdate(a, b) {\n if (a === b) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (a.constructor !== b.constructor) return true;\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) return true;\n for (let j = 0; j < a.length; j++) {\n if (a[j] !== b[j]) return true;\n }\n return false;\n }\n\n if (a.constructor === Object) {\n const keysA = Object.keys(a);\n if (keysA.length !== Object.keys(b).length) return true;\n for (const key of keysA) {\n if (!hasOwn(b, key) || a[key] !== b[key]) return true;\n }\n return false;\n }\n }\n return true;\n}\n\nfunction isIterable(x) {\n return (\n Array.isArray(x) ||\n (x != null && typeof x[Symbol.iterator] === 'function' && typeof x !== 'string')\n );\n}\n\nfunction alias(f) {\n return (...args) => new VNode(ALIAS_NODE, f, args);\n}\n\nfunction special(o) {\n return (...args) => new VNode(SPECIAL_NODE, o, args);\n}\n\nfunction newElementNamespace(parentNode, newNodeTag) {\n if (parentNode.namespaceURI === HTML_NAMESPACE) {\n switch (newNodeTag) {\n case 'svg':\n return 'http://www.w3.org/2000/svg';\n case 'math':\n return 'http://www.w3.org/1998/Math/MathML';\n }\n }\n return parentNode.namespaceURI ?? parentNode.host?.namespaceURI ?? HTML_NAMESPACE;\n}\n\n// `originalProps` is null-prototyped so that prop names like `__proto__` or\n// `toString` are recorded as ordinary own keys rather than hitting Object.prototype.\nfunction newNodeState(vdom) {\n return {originalProps: Object.create(null), newVdom: vdom};\n}\n\nfunction createElementNode(parentNode, tag, vdom) {\n const el = parentNode.ownerDocument.createElementNS(newElementNamespace(parentNode, tag), tag);\n el[NODE_STATE] = newNodeState(vdom);\n return el;\n}\n\nconst documentToFocusWithinSet = new WeakMap();\n\nfunction getPathFromElement(element) {\n const path = [];\n let current = element;\n while (current) {\n path.push(current);\n if (current.parentElement) {\n current = current.parentElement;\n } else {\n current = current.getRootNode()?.host;\n }\n }\n return path;\n}\n\nfunction addPathToFocusWithinSet(set, path) {\n for (const node of path) {\n set.add(node);\n }\n}\n\n// The realm's own `Node.prototype` is what we want, so that a node from an\n// iframe or a detached document is moved by its own implementation. Falls back\n// through the configured window and then the ambient one, either of which may\n// be all that is available for a document with no `defaultView`.\nfunction nodePrototypeFor(doc, settingsWindow) {\n const view = settingsWindow ?? doc?.defaultView ?? globalThis;\n return view.Node?.prototype ?? view.Element?.prototype;\n}\n\nfunction installFocusTrackingForDocument(doc) {\n const focusWithinSet = new Set();\n // The set is rebuilt on every focusin rather than accumulated. `focusin`\n // fires after `focusout`, and its composed path is the path of the element\n // that just gained focus, so this is always exactly the current focus path.\n // Accumulating instead would leave every previously focused element marked as\n // holding focus for the rest of the document's life.\n doc.addEventListener('focusin', event => {\n focusWithinSet.clear();\n addPathToFocusWithinSet(focusWithinSet, event.composedPath());\n });\n doc.addEventListener('focusout', event => {\n // A focusout with no relatedTarget means focus left the document entirely;\n // otherwise the focusin that follows will rebuild the set.\n if (!event.relatedTarget) focusWithinSet.clear();\n });\n addPathToFocusWithinSet(focusWithinSet, getPathFromElement(doc.activeElement));\n documentToFocusWithinSet.set(doc, focusWithinSet);\n return focusWithinSet;\n}\n\nexport default userSettings => {\n const shouldUpdate = userSettings?.shouldUpdate ?? defaultShouldUpdate;\n const isMap = userSettings?.isMap ?? (x => x?.constructor === Object);\n const mapIter = userSettings?.mapIter ?? (m => Object.entries(m));\n const mapGet = userSettings?.mapGet ?? ((m, k) => m[k]);\n const mapMerge = userSettings?.mapMerge ?? ((...maps) => Object.assign({}, ...maps));\n const newMap = userSettings?.newMap ?? (obj => ({...obj}));\n const mapPut =\n userSettings?.mapPut ??\n ((m, k, v) => {\n m[k] = v;\n return m;\n });\n const isSeq = userSettings?.isSeq ?? isIterable;\n const seqIter = userSettings?.seqIter ?? (s => s);\n const convertName = userSettings?.convertName ?? (x => x);\n const convertTagName = userSettings?.convertTagName ?? convertName;\n const convertPropName = userSettings?.convertPropName ?? convertName;\n const convertStyleName = userSettings?.convertStyleName ?? convertName;\n const convertDataName = userSettings?.convertDataName ?? convertName;\n const convertClassName = userSettings?.convertClassName ?? convertName;\n const convertHookName = userSettings?.convertHookName ?? convertName;\n const listenerKey = userSettings?.listenerKey ?? 'listener';\n const captureKey = userSettings?.captureKey ?? 'capture';\n const passiveKey = userSettings?.passiveKey ?? 'passive';\n\n const EMPTY_MAP = newMap({});\n\n function toIterator(iterableOrIterator) {\n if (iterableOrIterator == null) return [][Symbol.iterator]();\n if (typeof iterableOrIterator[Symbol.iterator] === 'function') {\n return iterableOrIterator[Symbol.iterator]();\n }\n if (typeof iterableOrIterator.next === 'function') {\n return iterableOrIterator;\n }\n return [iterableOrIterator][Symbol.iterator]();\n }\n\n // Reconciling one element walks its props, styling, attrs, dataset and hooks,\n // so building an array of [name, value] pairs for each of those maps is the\n // single biggest source of garbage in an update. `mapEach` is the iteration\n // primitive the reconciler actually uses: it visits entries without\n // materialising them.\n //\n // Supply `mapEach` for a custom collection and it is as cheap as a plain\n // object — ClojureScript has `reduce-kv`, Immutable.js has `forEach`. Supply\n // only `mapIter` and it still works, by way of the pairs it yields; that is\n // the existing contract and it is unchanged.\n //\n // The extra `a`/`b`/`c` slots let call sites pass context to a hoisted\n // visitor, so iterating does not allocate a closure either.\n // `for...in` with an own-key guard, not `Object.keys`: it allocates no key\n // array and measures ~3.5x faster, while enumerating exactly the same keys.\n // The guard has to be the hoisted `hasOwnProperty.call` — `Object.hasOwn`\n // reads better but benchmarks about the same as building the key array,\n // which defeats the point.\n function defaultMapEach(map, visit, a, b, c) {\n if (map == null) return;\n for (const key in map) {\n if (hasOwn(map, key)) visit(key, map[key], a, b, c);\n }\n }\n\n function mapEachViaIter(map, visit, a, b, c) {\n if (map == null) return;\n const iterator = toIterator(mapIter(map));\n let result;\n while (!(result = iterator.next()).done) {\n const entry = result.value;\n visit(entry[0], entry[1], a, b, c);\n }\n }\n\n // Only fall back to the plain-object walk when the user has told us nothing\n // about their maps. Overriding `mapIter` alone still routes through it.\n const mapEach =\n userSettings?.mapEach ?? (userSettings?.mapIter ? mapEachViaIter : defaultMapEach);\n\n // `null`, `undefined` and `false` are the \"render nothing\" values. Note the\n // checks are strict: `0` and `''` are legitimate text children.\n function isBlank(item) {\n return item === null || item === undefined || item === false;\n }\n\n function flattenSeqIntoArray(array, items, excludeFalsey) {\n const iterator = toIterator(seqIter(items));\n let result;\n while (!(result = iterator.next()).done) {\n const item = result.value;\n if (excludeFalsey && isBlank(item)) {\n continue;\n }\n\n if (!isSeq(item)) {\n array.push(item);\n } else {\n flattenSeqIntoArray(array, item, excludeFalsey);\n }\n }\n }\n\n function defaultFlattenSeq(items, excludeFalsey) {\n const array = [];\n flattenSeqIntoArray(array, items, excludeFalsey);\n return array;\n }\n\n const flattenSeq = userSettings?.flattenSeq ?? defaultFlattenSeq;\n\n function flattenVNodeChildren(children, startIndex) {\n const array = [];\n for (let i = startIndex; i < children.length; i++) {\n const item = children[i];\n if (isBlank(item)) continue;\n if (!isSeq(item)) {\n array.push(item);\n } else {\n flattenSeqIntoArray(array, item, true);\n }\n }\n return array;\n }\n\n // Blank children are filtered out before they reach here, but a custom\n // `flattenSeq` may not do that filtering, so never assume `.toString()` exists.\n function toText(value) {\n return isBlank(value) ? '' : String(value);\n }\n\n function h(tag, props, ...children) {\n if (!isMap(props)) {\n // An explicit nullish props slot means \"no props\", not \"render nothing\".\n if (props !== null && props !== undefined) children.unshift(props);\n props = EMPTY_MAP;\n }\n return new VNode(ELEMENT_NODE, convertTagName(tag), [props, ...children]);\n }\n\n // Visitors are hoisted to the factory closure rather than written inline, so\n // that iterating a map allocates neither entries nor a callback.\n function setStyleProperty(name, value, style) {\n style.setProperty(convertStyleName(name), value);\n }\n\n function removeStaleStyleProperty(name, _value, style, newStyling) {\n if (mapGet(newStyling, name) !== undefined) return;\n style.removeProperty(convertStyleName(name));\n }\n\n function reconcileElementStyling(target, oldStyling, newStyling) {\n const style = target.style;\n mapEach(newStyling, setStyleProperty, style);\n mapEach(oldStyling, removeStaleStyleProperty, style, newStyling);\n }\n\n function setAttribute(name, value, target) {\n target.setAttribute(convertPropName(name), value);\n }\n\n function removeStaleAttribute(name, _value, target, newAttrs) {\n if (mapGet(newAttrs, name) !== undefined) return;\n target.removeAttribute(convertPropName(name));\n }\n\n function reconcileElementAttributes(target, oldAttrs, newAttrs) {\n mapEach(newAttrs, setAttribute, target);\n mapEach(oldAttrs, removeStaleAttribute, target, newAttrs);\n }\n\n function setDataProperty(name, value, target) {\n target.dataset[convertDataName(name)] = value;\n }\n\n function removeStaleDataProperty(name, _value, target, newDataset) {\n if (mapGet(newDataset, name) !== undefined) return;\n delete target.dataset[convertDataName(name)];\n }\n\n function reconcileElementDataset(target, oldDataset, newDataset) {\n mapEach(newDataset, setDataProperty, target);\n mapEach(oldDataset, removeStaleDataProperty, target, newDataset);\n }\n\n function reconcileElementClasses(target, oldClasses, newClasses) {\n // Both sides are compared post-conversion, otherwise a non-identity\n // `convertClassName` would never match an old class against a new one.\n const classesToRemove = new Set();\n for (const c of flattenSeq(oldClasses, true)) {\n const className = convertClassName(c);\n if (className) classesToRemove.add(className);\n }\n for (const c of flattenSeq(newClasses, true)) {\n const className = convertClassName(c);\n // `classList.add('')` throws, and empty class names carry no meaning.\n if (!className) continue;\n classesToRemove.delete(className);\n target.classList.add(className);\n }\n for (const className of classesToRemove) {\n target.classList.remove(className);\n }\n }\n\n function setElementProp(target, nodeState, propName, newValue) {\n if (UNSAFE_PROP_NAMES.has(propName)) {\n console.error(`Refusing to assign unsafe prop name '${propName}' to a DOM node.`);\n return;\n }\n const originalProps = nodeState.originalProps;\n if (!(propName in originalProps)) {\n originalProps[propName] = target[propName];\n }\n target[propName] = newValue === undefined ? originalProps[propName] : newValue;\n }\n\n function restoreElementProp(target, nodeState, propName) {\n const originalProps = nodeState.originalProps;\n if (propName in originalProps) {\n target[propName] = originalProps[propName];\n delete originalProps[propName];\n }\n }\n\n function applyProp(name, newValue, target, oldProps, isHtml) {\n const propName = convertPropName(name);\n const oldValue = mapGet(oldProps, name);\n\n if (Object.is(newValue, oldValue)) return;\n\n switch (propName) {\n case '$styling': {\n if (!isMap(newValue)) throw new Error('invalid value for styling prop');\n reconcileElementStyling(target, oldValue ?? EMPTY_MAP, newValue ?? EMPTY_MAP);\n break;\n }\n case '$classes': {\n if (!isSeq(newValue)) throw new Error('invalid value for classes prop');\n reconcileElementClasses(target, oldValue ?? [], newValue ?? []);\n break;\n }\n case '$attrs': {\n if (!isMap(newValue)) throw new Error('invalid value for attrs prop');\n reconcileElementAttributes(target, oldValue ?? EMPTY_MAP, newValue ?? EMPTY_MAP);\n break;\n }\n case '$dataset': {\n if (!isMap(newValue)) throw new Error('invalid value for dataset prop');\n reconcileElementDataset(target, oldValue ?? EMPTY_MAP, newValue ?? EMPTY_MAP);\n break;\n }\n default: {\n if (isHtml) {\n setElementProp(target, target[NODE_STATE], propName, newValue);\n } else {\n if (newValue === undefined) {\n target.removeAttribute(propName);\n } else {\n target.setAttribute(propName, newValue);\n }\n }\n break;\n }\n }\n }\n\n function restoreRemovedProp(name, oldValue, target, props, isHtml) {\n if (mapGet(props, name) !== undefined) return; // it wasn't removed\n\n const propName = convertPropName(name);\n switch (propName) {\n case '$styling':\n reconcileElementStyling(target, oldValue ?? EMPTY_MAP, EMPTY_MAP);\n break;\n case '$classes':\n reconcileElementClasses(target, oldValue ?? [], []);\n break;\n case '$attrs':\n reconcileElementAttributes(target, oldValue ?? EMPTY_MAP, EMPTY_MAP);\n break;\n case '$dataset':\n reconcileElementDataset(target, oldValue ?? EMPTY_MAP, EMPTY_MAP);\n break;\n default: {\n if (isHtml) {\n restoreElementProp(target, target[NODE_STATE], propName);\n } else {\n target.removeAttribute(propName);\n }\n break;\n }\n }\n }\n\n function reconcileElementProps(target, props) {\n const nodeState = target[NODE_STATE];\n const isHtml = target.namespaceURI === HTML_NAMESPACE;\n const oldProps = nodeState.vdom?.args[0] ?? EMPTY_MAP;\n\n mapEach(props, applyProp, target, oldProps, isHtml);\n mapEach(oldProps, restoreRemovedProp, target, props, isHtml);\n }\n\n function addListener(target, hookName, listener) {\n if (typeof listener === 'function') {\n target.addEventListener(hookName, listener);\n } else if (listener != null) {\n target.addEventListener(hookName, mapGet(listener, listenerKey), {\n capture: !!mapGet(listener, captureKey),\n passive: !!mapGet(listener, passiveKey),\n });\n }\n }\n\n function removeListener(target, hookName, listener) {\n if (typeof listener === 'function') {\n target.removeEventListener(hookName, listener);\n } else if (listener != null) {\n target.removeEventListener(\n hookName,\n mapGet(listener, listenerKey),\n !!mapGet(listener, captureKey),\n );\n }\n }\n\n function addInitialListener(name, listener, target) {\n const hookName = convertHookName(name);\n if (hookName[0] === '$') return;\n addListener(target, hookName, listener);\n }\n\n function swapListener(name, listener, target, oldHooks) {\n const hookName = convertHookName(name);\n if (hookName[0] === '$') return;\n const oldListener = mapGet(oldHooks, name);\n if (listener === oldListener) return;\n removeListener(target, hookName, oldListener);\n addListener(target, hookName, listener);\n }\n\n function removeStaleListener(name, oldListener, target, newHooks) {\n const hookName = convertHookName(name);\n if (hookName[0] === '$' || mapGet(newHooks, name) !== undefined) return;\n removeListener(target, hookName, oldListener);\n }\n\n function reconcileListeners(target, hooks) {\n const state = target[NODE_STATE];\n const newHooks = hooks ?? EMPTY_MAP;\n\n if (!state.vdom) {\n mapEach(newHooks, addInitialListener, target);\n return;\n }\n\n const oldHooks = state.vdom.hooks ?? EMPTY_MAP;\n mapEach(newHooks, swapListener, target, oldHooks);\n mapEach(oldHooks, removeStaleListener, target, newHooks);\n }\n\n function reconcileNode(target) {\n const state = target[NODE_STATE];\n const newVdom = state.newVdom;\n const oldVdom = state.vdom;\n const args = newVdom.args;\n\n switch (newVdom.type) {\n case ELEMENT_NODE: {\n reconcileElementProps(target, args[0]);\n reconcileElementChildren(target, flattenVNodeChildren(args, 1));\n break;\n }\n case OPAQUE_NODE: {\n reconcileElementProps(target, args[0]);\n break;\n }\n case ALIAS_NODE: {\n const innerVdom = newVdom.tag.apply(target, newVdom.args);\n if (isBlank(innerVdom)) {\n reconcileElementChildren(target, []);\n } else if (isSeq(innerVdom)) {\n reconcileElementChildren(target, flattenSeq(innerVdom, true));\n } else {\n reconcileElementChildren(target, [innerVdom]);\n }\n break;\n }\n case SPECIAL_NODE: {\n try {\n newVdom.tag.update?.(target, newVdom.args, oldVdom?.args);\n } catch (err) {\n console.error(err);\n }\n break;\n }\n }\n\n if (newVdom.hooks || oldVdom?.hooks) {\n reconcileListeners(target, newVdom.hooks ?? EMPTY_MAP);\n }\n try {\n newVdom.hooks?.$update?.(target, newVdom, oldVdom);\n } catch (err) {\n console.error(err);\n }\n state.vdom = newVdom;\n delete state.newVdom;\n }\n\n function createNode(parentNode, vdom) {\n if (typeof vdom !== 'object' || vdom === null) {\n return parentNode.ownerDocument.createTextNode(toText(vdom));\n }\n\n let domNode;\n switch (vdom.type) {\n case ELEMENT_NODE:\n case OPAQUE_NODE:\n domNode = createElementNode(parentNode, vdom.tag, vdom);\n break;\n case ALIAS_NODE:\n domNode = createElementNode(parentNode, 'udom-alias', vdom);\n domNode.style.display = 'contents';\n break;\n case SPECIAL_NODE:\n domNode = createElementNode(parentNode, 'udom-special', vdom);\n domNode.style.display = 'contents';\n break;\n default:\n throw new Error('Invalid VDOM node');\n }\n return domNode;\n }\n\n function cleanupTargetChildren(target) {\n if (target.children) {\n for (const child of target.children) {\n cleanupTarget(child);\n }\n }\n }\n\n function cleanupTarget(target) {\n const state = target[NODE_STATE];\n if (!state) {\n return;\n }\n\n const {vdom} = state;\n if (!vdom) {\n // The node was created but never reconciled (a builder threw part way\n // through); there is nothing attached to tear down.\n delete target[NODE_STATE];\n return;\n }\n\n if (vdom.hooks) {\n reconcileListeners(target, EMPTY_MAP);\n }\n\n if (vdom.type === ELEMENT_NODE || vdom.type === OPAQUE_NODE) {\n reconcileElementProps(target, EMPTY_MAP);\n }\n\n if (vdom.type === ELEMENT_NODE || vdom.type === ALIAS_NODE) {\n cleanupTargetChildren(target);\n }\n\n delete target[NODE_STATE];\n\n try {\n if (vdom.type === SPECIAL_NODE) {\n vdom.tag.detach?.(target);\n }\n vdom.hooks?.$detach?.(target);\n } catch (err) {\n console.error(err);\n }\n }\n\n // A reused node only needs a second pass when its arguments or its hooks\n // changed; comparing hooks too means a node whose props are stable but whose\n // listeners are freshly bound each render still gets those listeners swapped.\n function claimExistingNode(domNode, newVdom) {\n const state = domNode[NODE_STATE];\n if (\n shouldUpdate(state.vdom.args, newVdom.args) ||\n shouldUpdate(state.vdom.hooks, newVdom.hooks)\n ) {\n state.newVdom = newVdom;\n }\n return domNode;\n }\n\n function collectOldChildren(target) {\n // Keyed by vdom tag; each bucket keeps a native Map of key -> nodes so that\n // user supplied keys such as 'constructor' or '__proto__' cannot collide\n // with Object.prototype. `cursor` replaces Array#shift, which would make\n // reconciling a long unkeyed list quadratic.\n const byTag = new Map();\n const textNodes = {nodes: [], cursor: 0};\n\n for (const oldChild of target.childNodes) {\n if (oldChild.nodeType === 3 /* TEXT_NODE */) {\n textNodes.nodes.push(oldChild);\n continue;\n }\n\n const oldChildState = oldChild[NODE_STATE];\n const vdom = oldChildState?.vdom;\n if (vdom === undefined) {\n if (oldChildState?.newVdom) {\n throw new Error(\n 'Attempt to reconcile against a target while already working on a reconciliation against that same target, this is not allowed',\n );\n }\n continue;\n }\n\n let poolForTag = byTag.get(vdom.tag);\n if (!poolForTag) {\n poolForTag = {nodesForKey: null, nodesWithoutKey: {nodes: [], cursor: 0}};\n byTag.set(vdom.tag, poolForTag);\n }\n\n if (vdom.k !== undefined) {\n if (!poolForTag.nodesForKey) poolForTag.nodesForKey = new Map();\n const nodesForKey = poolForTag.nodesForKey.get(vdom.k);\n if (nodesForKey) {\n nodesForKey.nodes.push(oldChild);\n } else {\n poolForTag.nodesForKey.set(vdom.k, {nodes: [oldChild], cursor: 0});\n }\n } else {\n poolForTag.nodesWithoutKey.nodes.push(oldChild);\n }\n }\n\n return {byTag, textNodes};\n }\n\n function takeFromPool(pool) {\n if (!pool || pool.cursor >= pool.nodes.length) return undefined;\n return pool.nodes[pool.cursor++];\n }\n\n // Places children in order, walking the existing siblings alongside the\n // desired list so that only nodes that are genuinely out of position move.\n function placeChildren(target, newDomChildren, insertBefore, moveBefore) {\n let ref = target.firstChild;\n for (let i = 0; i < newDomChildren.length; i++) {\n const newChild = newDomChildren[i];\n if (newChild === ref) {\n ref = ref.nextSibling;\n continue;\n }\n const op = moveBefore && newChild.isConnected ? moveBefore : insertBefore;\n op.call(target, newChild, ref);\n }\n }\n\n // Same result, but reached without ever passing the focused child to\n // insertBefore. Detaching a focused node blurs it, so instead it is treated\n // as a fixed anchor and every other child is arranged around it: the children\n // that belong before it are placed immediately before it, and the rest are\n // walked into place after it. The anchor still ends up at its correct index,\n // because exactly the right number of children end up on either side.\n //\n // Only needed where `moveBefore` is unavailable — it relocates a node without\n // detaching it, so focus survives an ordinary move.\n function placeChildrenAroundAnchor(target, newDomChildren, insertBefore, anchorIndex) {\n const anchor = newDomChildren[anchorIndex];\n\n // Right to left, so each child lands directly before the one that follows it.\n let before = anchor;\n for (let i = anchorIndex - 1; i >= 0; i--) {\n const child = newDomChildren[i];\n if (child !== before.previousSibling) {\n insertBefore.call(target, child, before);\n }\n before = child;\n }\n\n // Left to right over whatever still follows the anchor. Children that were\n // stranded on the other side of it get pulled across here.\n let ref = anchor.nextSibling;\n for (let i = anchorIndex + 1; i < newDomChildren.length; i++) {\n const child = newDomChildren[i];\n if (child === ref) {\n ref = ref.nextSibling;\n } else {\n insertBefore.call(target, child, ref);\n }\n }\n }\n\n // At most one child of a given parent can be on the focus path, so there is\n // never more than one anchor to preserve.\n function findFocusedChildIndex(newDomChildren, focusWithin) {\n for (let i = 0; i < newDomChildren.length; i++) {\n if (focusWithin.has(newDomChildren[i])) return i;\n }\n return -1;\n }\n\n function attachAndReconcile(newChild) {\n const state = newChild[NODE_STATE];\n if (!state?.newVdom) return;\n if (!state.vdom) {\n try {\n state.newVdom.hooks?.$attach?.(newChild);\n if (state.newVdom.type === SPECIAL_NODE) {\n state.newVdom.tag.attach?.(newChild);\n }\n } catch (err) {\n console.error(err);\n }\n }\n reconcileNode(newChild);\n }\n\n function reconcileElementChildren(target, newChildren) {\n const oldNodesToRemove = target.firstChild ? new Set(target.childNodes) : null;\n const {byTag, textNodes} = collectOldChildren(target);\n\n const newDomChildren = [];\n for (const newVdom of newChildren) {\n let newDomNode;\n if (newVdom instanceof VNode) {\n const poolForTag = byTag.get(newVdom.tag);\n const reusable = poolForTag\n ? takeFromPool(\n newVdom.k !== undefined\n ? poolForTag.nodesForKey?.get(newVdom.k)\n : poolForTag.nodesWithoutKey,\n )\n : undefined;\n newDomNode = reusable ? claimExistingNode(reusable, newVdom) : createNode(target, newVdom);\n } else {\n const reusableText = takeFromPool(textNodes);\n const text = toText(newVdom);\n if (reusableText) {\n newDomNode = reusableText;\n if (newDomNode.nodeValue !== text) newDomNode.nodeValue = text;\n } else {\n newDomNode = target.ownerDocument.createTextNode(text);\n }\n }\n oldNodesToRemove?.delete(newDomNode);\n newDomChildren.push(newDomNode);\n }\n\n if (oldNodesToRemove) {\n for (const nodeToRemove of oldNodesToRemove) {\n cleanupTarget(nodeToRemove);\n target.removeChild(nodeToRemove);\n }\n }\n\n if (newDomChildren.length === 0) return;\n\n const doc = target.ownerDocument;\n const nodeProto = nodePrototypeFor(doc, userSettings?.window);\n const insertBefore = nodeProto.insertBefore;\n const moveBefore = typeof nodeProto.moveBefore === 'function' ? nodeProto.moveBefore : null;\n const connected = target.isConnected;\n\n let anchorIndex = -1;\n if (connected && !moveBefore) {\n const focusWithin = documentToFocusWithinSet.get(doc) ?? installFocusTrackingForDocument(doc);\n anchorIndex = findFocusedChildIndex(newDomChildren, focusWithin);\n // A focused child is always one we pooled from the existing children, so\n // it is already under this target. The guard is only here so that a\n // surprising focus set can never turn into a thrown insertBefore.\n if (anchorIndex !== -1 && newDomChildren[anchorIndex].parentNode !== target) {\n anchorIndex = -1;\n }\n }\n\n if (anchorIndex === -1) {\n placeChildren(target, newDomChildren, insertBefore, connected ? moveBefore : null);\n } else {\n placeChildrenAroundAnchor(target, newDomChildren, insertBefore, anchorIndex);\n }\n\n // Placement happens first so that lifecycle hooks and alias builders run\n // against a fully arranged sibling list rather than a half built one.\n for (let i = 0; i < newDomChildren.length; i++) {\n attachAndReconcile(newDomChildren[i]);\n }\n }\n\n function reconcile(target, vdom) {\n const state = target[NODE_STATE];\n if (vdom === null || vdom === undefined) {\n if (state) {\n cleanupTarget(target);\n } else {\n cleanupTargetChildren(target);\n }\n target.replaceChildren();\n return;\n }\n\n if (isSeq(vdom)) {\n reconcileElementChildren(target, flattenSeq(vdom, true));\n return;\n }\n\n if (vdom instanceof VNode) {\n if (state) {\n // The tag has to match as well as the type: swapping the alias function\n // or the special descriptor is a different component, and reusing the\n // state would skip the old one's detach and the new one's attach.\n if (state.vdom.type === vdom.type && state.vdom.tag === vdom.tag) {\n if (\n shouldUpdate(state.vdom.args, vdom.args) ||\n shouldUpdate(state.vdom.hooks, vdom.hooks)\n ) {\n state.newVdom = vdom;\n reconcileNode(target);\n }\n return;\n }\n cleanupTarget(target);\n }\n\n switch (vdom.type) {\n case ELEMENT_NODE:\n case OPAQUE_NODE:\n if (!sameTagName(target.nodeName, convertTagName(vdom.tag))) {\n throw new Error('incompatible target for vdom');\n }\n break;\n }\n\n target[NODE_STATE] = newNodeState(vdom);\n try {\n vdom.hooks?.$attach?.(target);\n if (vdom.type === SPECIAL_NODE) {\n vdom.tag.attach?.(target);\n }\n } catch (err) {\n console.error(err);\n }\n reconcileNode(target);\n return;\n }\n\n throw new Error('invalid vdom');\n }\n\n return {\n h,\n alias,\n special,\n reconcile,\n settings: {\n shouldUpdate,\n isMap,\n mapIter,\n mapEach,\n mapGet,\n mapMerge,\n newMap,\n mapPut,\n isSeq,\n flattenSeq,\n seqIter,\n convertTagName,\n convertPropName,\n convertStyleName,\n convertDataName,\n convertClassName,\n convertHookName,\n convertName,\n listenerKey,\n captureKey,\n passiveKey,\n },\n };\n};\n",
|
|
6
6
|
"export default function htmlFactory({h}) {\n return {\n // Document metadata\n title: (...args) => h('title', ...args),\n meta: props => h('meta', props),\n link: props => h('link', props),\n style: (...args) => h('style', ...args),\n script: (...args) => h('script', ...args),\n noscript: (...args) => h('noscript', ...args),\n\n // Content sectioning\n address: (...args) => h('address', ...args),\n article: (...args) => h('article', ...args),\n aside: (...args) => h('aside', ...args),\n footer: (...args) => h('footer', ...args),\n header: (...args) => h('header', ...args),\n h1: (...args) => h('h1', ...args),\n h2: (...args) => h('h2', ...args),\n h3: (...args) => h('h3', ...args),\n h4: (...args) => h('h4', ...args),\n h5: (...args) => h('h5', ...args),\n h6: (...args) => h('h6', ...args),\n main: (...args) => h('main', ...args),\n nav: (...args) => h('nav', ...args),\n section: (...args) => h('section', ...args),\n\n // Text content\n blockquote: (...args) => h('blockquote', ...args),\n dd: (...args) => h('dd', ...args),\n div: (...args) => h('div', ...args),\n dl: (...args) => h('dl', ...args),\n dt: (...args) => h('dt', ...args),\n figcaption: (...args) => h('figcaption', ...args),\n figure: (...args) => h('figure', ...args),\n hr: () => h('hr'),\n li: (...args) => h('li', ...args),\n ol: (...args) => h('ol', ...args),\n p: (...args) => h('p', ...args),\n pre: (...args) => h('pre', ...args),\n ul: (...args) => h('ul', ...args),\n\n // Inline text semantics\n a: (...args) => h('a', ...args),\n abbr: (...args) => h('abbr', ...args),\n b: (...args) => h('b', ...args),\n br: () => h('br'),\n cite: (...args) => h('cite', ...args),\n code: (...args) => h('code', ...args),\n data: (...args) => h('data', ...args),\n del: (...args) => h('del', ...args),\n dfn: (...args) => h('dfn', ...args),\n em: (...args) => h('em', ...args),\n i: (...args) => h('i', ...args),\n ins: (...args) => h('ins', ...args),\n kbd: (...args) => h('kbd', ...args),\n mark: (...args) => h('mark', ...args),\n q: (...args) => h('q', ...args),\n s: (...args) => h('s', ...args),\n samp: (...args) => h('samp', ...args),\n small: (...args) => h('small', ...args),\n span: (...args) => h('span', ...args),\n strong: (...args) => h('strong', ...args),\n sub: (...args) => h('sub', ...args),\n sup: (...args) => h('sup', ...args),\n time: (...args) => h('time', ...args),\n u: (...args) => h('u', ...args),\n wbr: () => h('wbr'),\n\n // Image and multimedia\n area: props => h('area', props),\n audio: (...args) => h('audio', ...args),\n img: props => h('img', props),\n map: (...args) => h('map', ...args),\n track: props => h('track', props),\n video: (...args) => h('video', ...args),\n\n // Embedded content\n embed: props => h('embed', props),\n iframe: (...args) => h('iframe', ...args),\n object: (...args) => h('object', ...args),\n param: props => h('param', props),\n picture: (...args) => h('picture', ...args),\n portal: (...args) => h('portal', ...args),\n source: props => h('source', props),\n\n // SVG and MathML\n svg: (...args) => h('svg', ...args),\n math: (...args) => h('math', ...args),\n\n // Scripting\n canvas: (...args) => h('canvas', ...args),\n\n // Table content\n caption: (...args) => h('caption', ...args),\n col: props => h('col', props),\n colgroup: (...args) => h('colgroup', ...args),\n table: (...args) => h('table', ...args),\n tbody: (...args) => h('tbody', ...args),\n td: (...args) => h('td', ...args),\n tfoot: (...args) => h('tfoot', ...args),\n th: (...args) => h('th', ...args),\n thead: (...args) => h('thead', ...args),\n tr: (...args) => h('tr', ...args),\n\n // Forms\n button: (...args) => h('button', ...args),\n datalist: (...args) => h('datalist', ...args),\n fieldset: (...args) => h('fieldset', ...args),\n form: (...args) => h('form', ...args),\n input: props => h('input', props),\n label: (...args) => h('label', ...args),\n legend: (...args) => h('legend', ...args),\n meter: (...args) => h('meter', ...args),\n optgroup: (...args) => h('optgroup', ...args),\n option: (...args) => h('option', ...args),\n output: (...args) => h('output', ...args),\n progress: (...args) => h('progress', ...args),\n select: (...args) => h('select', ...args),\n textarea: (...args) => h('textarea', ...args),\n\n // Interactive elements\n details: (...args) => h('details', ...args),\n dialog: (...args) => h('dialog', ...args),\n summary: (...args) => h('summary', ...args),\n\n // Web Components\n slot: (...args) => h('slot', ...args),\n template: (...args) => h('template', ...args),\n };\n}\n",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"// Install flow: turn an uploaded .zip or a URL into a parsed package, assess its\n// trust (signature + domain verification), and present the pre-install review so\n// the user can make an informed decision before any plugin code runs.\n//\n// Takes the four resources it actually needs rather than the whole `app`. That is what let\n// the last two actions stop leasing `app` — and a lease that names notifications, plugins,\n// workbench and social says what an install touches, where `app` said nothing at all.\n\nimport { parsePackage, fetchPackage, reviewSummary, displayName } from '../platform/pluginPackage.js';\nimport { pluginId } from '@3sln/trove/core/plugins/identity.js';\nimport { installPolicyFor } from './trust.js';\nimport { InstallReviewedPluginAction } from './actions.js';\n\n/**\n * What an install touches. The parameter list below is the same set spelled out, so a lease\n * that forgot one is a missing ARGUMENT at the top of the function rather than an\n * `undefined` several lines in — which is how a missing `overlay` came to be reported to\n * the user as \"Couldn't read the plugin\", about a file that read perfectly.\n *\n * @typedef {{notifications: object, overlay: object, plugins: object, social: object, workbench: object}} InstallResources\n */\n\n/** @param {InstallResources} r */\nexport async function beginInstallFromFile(r, file) {\n try {\n const bytes = new Uint8Array(await file.arrayBuffer());\n await review(r, parsePackage(bytes));\n } catch (err) {\n r.notifications.error(`Couldn't read the plugin: ${err.message}`);\n }\n}\n\n/** @param {InstallResources} r */\nexport async function beginInstallFromUrl(r, url) {\n try {\n const pkg = await fetchPackage(url, (u, o) => fetch(u, o));\n await review(r, pkg);\n } catch (err) {\n r.notifications.error(`Couldn't fetch the plugin: ${err.message}`);\n }\n}\n\n/** @param {InstallResources} r */\nasync function review({ notifications, overlay, plugins, social, workbench }, pkg) {\n const label = displayName(pkg.manifest);\n if (plugins.plugins.has(pluginId(pkg.manifest))) {\n notifications.warn(`“${label}” is already installed.`);\n return;\n }\n // Trust assessment can hit the network (domain assetlinks); do it before review.\n let trust = { status: 'unverified' };\n try {\n trust = await plugins.assessTrust(pkg);\n } catch { /* offline / unreachable */ }\n\n // A tampered package is refused here rather than presented with a warning. The review\n // dialog exists to let someone weigh what a plugin asks for against who is asking; a\n // signature that does not match its contents means the \"who\" is unknown and the contents\n // are not what was signed, so there is nothing to weigh. See installPolicyFor.\n const policy = installPolicyFor(trust);\n if (!policy.allowed) {\n notifications.error(`“${label}” was not installed. ${policy.detail}`, { sticky: true });\n return;\n }\n\n // `installActions`, not an `onInstall` closure. Two docblocks state the invariant —\n // \"Nothing in a dialog spec is callable, which matters because the spec lives in\n // workbench state\" (actions.js) and \"the dialog spec holds no functions\" (overlays.js) —\n // and this dialog was the sole violation. That closure cleared the overlay, moved the\n // workbench, raised a notification and performed the network install, all after the\n // dispatching action's lease had been released and none of it on the feed.\n //\n // The alternative was already here: pluginReview keeps its ticked grants in viewState and\n // dispatches per toggle, so the action needs to carry only `pkg` and `trust` and can read\n // the grants from the key the dialog already writes.\n overlay.set({ dialog: {\n kind: 'plugin-review',\n summary: reviewSummary(pkg, trust),\n policy,\n isAdmin: !!social.get().admin,\n installActions: [new InstallReviewedPluginAction(pkg, trust, label)],\n } });\n}\n",
|
|
43
43
|
"// One tag matcher, for everybody.\n//\n// There were four: this logic in `transformer.js` (post-filtering semantic results), a\n// near-copy in the memory metadata store, a third in the browser (used by the offline\n// path), and SQL in the sqlite store. Each pair \"mirrored\" the others in a comment and\n// diverged in fact:\n//\n// - the client lowercased both operands for `<`/`<=`/`>`/`>=`; the server did not, so\n// `#author:>Bob` against `author: \"alice\"` was false online and true offline;\n// - the sqlite store bound `String(value)` against `json_extract`, which preserves JSON\n// types, so a numeric tag `pages: 120` matched `#pages:!=120` and not `#pages:120`;\n// - the sqlite store treated `present` as `IS NOT NULL`, so a tag explicitly set to\n// `false` counted as present — everywhere else it does not;\n// - the sqlite store never consulted `meta`, which the interface documents as part of\n// what a filter matches.\n//\n// So the semantics live here, once, and the SQL in `metadata/sqlite.js` is written to\n// agree with THIS file rather than with its own history.\n//\n// The rules:\n// present the tag exists and is not `false` and not `''`\n// = / != numeric compare when BOTH sides are numbers, else case-insensitive text\n// < <= > >= same, and text comparison is case-insensitive (it was not on the server,\n// which is the one difference a user could actually observe between an\n// online and an offline search)\n\n/** A node's filterable properties: `meta`, overlaid by its merged tags. */\nexport function tagProps(node, mergedTags = null) {\n return { ...(node?.meta || {}), ...(mergedTags || node?.tags || {}) };\n}\n\n/** Does one value satisfy one parsed filter? */\nexport function matchesFilter(value, filter) {\n if (filter.present) return value != null && value !== false && value !== '';\n if (value == null) return false;\n const na = Number(value);\n const nb = Number(filter.value);\n // `Number('')` is 0, which would make an empty string compare as a number — hence\n // the explicit emptiness checks rather than `!Number.isNaN` alone.\n const numeric = value !== '' && value !== true && value !== false\n && filter.value !== '' && filter.value != null\n && !Number.isNaN(na) && !Number.isNaN(nb);\n const x = numeric ? na : String(value).toLowerCase();\n const y = numeric ? nb : String(filter.value).toLowerCase();\n switch (filter.op) {\n case '!=': return x !== y;\n case '<': return x < y;\n case '<=': return x <= y;\n case '>': return x > y;\n case '>=': return x >= y;\n default: return x === y;\n }\n}\n\n/** Does a node satisfy every filter? `mergedTags` when the caller already computed them. */\nexport function matchTagFilters(node, filters, mergedTags = null) {\n const props = tagProps(node, mergedTags);\n return (filters || []).every((f) => matchesFilter(props[f.key], f));\n}\n",
|
|
44
44
|
"// Parse `#tag` / `#key:op:value` filter tokens out of a launcher query and match\n// nodes against them. Grammar (each token, space-separated):\n// #tag → the property/tag is present\n// #key:=v #key:!=v #key:<v #key:<=v #key:>v #key:>=v → compare\n// #key:v → equality shorthand (same as #key:=v)\n// Values may be \"quoted\" to include spaces. Comparisons are numeric when both\n// sides parse as numbers, otherwise case-insensitive string comparisons.\n\nimport { matchTagFilters } from '@3sln/trove/core/search/tagMatch.js';\n\nconst TOKEN = /#([\\w.-]+)(?::(<=|>=|!=|=|<|>)?(\"[^\"]*\"|[^#\\s]+)?)?/g;\n\n/** @returns {{ text: string, filters: {key,op,value,present}[] }} */\nexport function parseTagQuery(query) {\n const filters = [];\n let text = query;\n for (const m of query.matchAll(TOKEN)) {\n const [, key, op, rawValue] = m;\n const value = rawValue && rawValue.startsWith('\"') ? rawValue.slice(1, -1) : rawValue;\n filters.push(value == null || value === ''\n ? { key, present: true }\n : { key, op: op || '=', value, present: false });\n text = text.replace(m[0], ' ');\n }\n return { text: text.replace(/\\s+/g, ' ').trim(), filters };\n}\n\n/**\n * True if `node` satisfies ALL filters (AND).\n *\n * Delegates to core rather than re-implementing. This file had its own copy, and the\n * two drifted on the ordering operators — the client lowercased both operands, the\n * server did not — so `#author:>Bob` against `author: \"alice\"` answered differently\n * online and offline. Same query, same drive, different files.\n */\nexport function matchesTagFilters(node, filters) {\n if (!filters || !filters.length) return true;\n return matchTagFilters(node, filters);\n}\n\n/** Short human label for a filter (for the results heading). */\nexport function filterLabel(f) {\n return f.present ? `#${f.key}` : `#${f.key}:${f.op}${f.value}`;\n}\n",
|
|
45
|
-
"// One place that knows how to classify a file by type — extension extraction and a\n// single format table. Previously the ext/mime lists were re-derived (and drifted)\n// across openers.extOf, contributions.matchesSelector, iconForNode, and offline.isTexty;\n// now the icon shown, the \"is this text?\" decision, and the type label all agree.\n\n/** The extension (\".pdf\") for a node, lowercased, or '' if none. */\nexport function extOf(node) {\n const name = (node?.name || '').toLowerCase();\n return name.includes('.') ? name.slice(name.lastIndexOf('.')) : '';\n}\n\n// Category → { mime: prefixes/exact it matches, ext: extensions }. Order matters:\n// kindOf checks these top-down.\nconst CATEGORIES = [\n { kind: 'audio', icon: 'file-audio', mime: ['audio/'], ext: ['.mp3', '.flac', '.wav', '.opus', '.ogg', '.m4a', '.m4b'] },\n { kind: 'image', icon: 'file-image', mime: ['image/'], ext: ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.avif'] },\n { kind: 'video', icon: 'file-video', mime: ['video/'], ext: ['.mp4', '.webm', '.mkv', '.mov'] },\n {\n kind: 'text', icon: 'file-text', mime: ['text/', 'application/json'],\n ext: ['.txt', '.md', '.markdown', '.json', '.js', '.mjs', '.ts', '.jsx', '.tsx', '.css', '.html',\n '.xml', '.yaml', '.yml', '.toml', '.ini', '.log', '.csv', '.py', '.rb', '.go', '.rs', '.sh', '.c', '.h', '.cpp', '.java'],\n },\n];\n\nfunction matchesCategory(cat, ext, ct) {\n if (cat.ext.includes(ext)) return true;\n // A mime entry ending in '/' is a prefix (audio/), otherwise an exact type.\n return cat.mime.some((m) => (m.endsWith('/') ? ct.startsWith(m) : ct === m));\n}\n\n/** Classify an item → 'audio'|'image'|'video'|'text'|'file'. */\nexport function kindOf(node) {\n const ext = extOf(node);\n const ct = node?.contentType || '';\n for (const cat of CATEGORIES) if (matchesCategory(cat, ext, ct)) return cat.kind;\n return 'file';\n}\n\nconst ICONS = { ...Object.fromEntries(CATEGORIES.map((c) => [c.kind, c.icon])), file: 'file' };\n\n/** The icon name for a node, derived from its kind. */\nexport function iconForKind(node) {\n return ICONS[kindOf(node)] || 'file';\n}\n\n/**\n * The key an indexer writes a tile picture under, and the ONE key the grid looks for.\n *\n * A preset name rather than a per-plugin registration, because a thumbnail is not a\n * contribution TYPE — it is a fact about a file that any indexer may happen to know. The\n * audiobook plugin extracts cover art from an m4b's `covr` atom and an LPF's manifest;\n * a PDF indexer could write its first page under the same key and the grid would draw it\n * with no change here.\n *\n * @see plugins/audiobook/src/coverIndexer.js\n */\nexport const THUMBNAIL_KEY = 'thumbnail';\n\n/**\n * A picture to put on this node's tile, or null.\n *\n * Contributions are namespaced by contributor, and a view deliberately does not care WHICH\n * one supplied it: the first that did wins, and a drive with two thumbnail indexers for one\n * file type has a configuration problem rather than a rendering one.\n *\n * TWO SHAPES, because a thumbnail is either already somewhere or it is not:\n *\n * { range: {start, end}, contentType } the bytes live in the FILE — an m4b's cover art\n * sits in its `covr` atom — so the contribution\n * points at them. Eighty bytes on the wire instead\n * of a base64 copy on every listing.\n * { src } a self-contained URL, for the cases with nothing\n * to point at. Small by construction; see the\n * indexer's cap.\n *\n * @returns {{range?: {start: number, end: number}, src?: string, contentType?: string}|null}\n */\nexport function thumbnailOf(node) {\n const contributions = node?.contributions;\n if (!contributions) return null;\n for (const contribution of Object.values(contributions)) {\n const thumb = contribution?.metadata?.[THUMBNAIL_KEY];\n if (typeof thumb?.src === 'string' && thumb.src) return thumb;\n if (Number.isFinite(thumb?.range?.start) && Number.isFinite(thumb?.range?.end)) return thumb;\n }\n return null;\n}\n\n/** Whether a node holds indexable text (drives offline text extraction). */\nexport function isTexty(node) {\n return kindOf(node) === 'text';\n}\n",
|
|
45
|
+
"// One place that knows how to classify a file by type — extension extraction and a\n// single format table. Previously the ext/mime lists were re-derived (and drifted)\n// across openers.extOf, contributions.matchesSelector, iconForNode, and offline.isTexty;\n// now the icon shown, the \"is this text?\" decision, and the type label all agree.\n\n/** The extension (\".pdf\") for a node, lowercased, or '' if none. */\nexport function extOf(node) {\n const name = (node?.name || '').toLowerCase();\n return name.includes('.') ? name.slice(name.lastIndexOf('.')) : '';\n}\n\n// Category → { mime: prefixes/exact it matches, ext: extensions }. Order matters:\n// kindOf checks these top-down.\nconst CATEGORIES = [\n { kind: 'audio', icon: 'file-audio', mime: ['audio/'], ext: ['.mp3', '.flac', '.wav', '.opus', '.ogg', '.m4a', '.m4b'] },\n { kind: 'image', icon: 'file-image', mime: ['image/'], ext: ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.avif'] },\n { kind: 'video', icon: 'file-video', mime: ['video/'], ext: ['.mp4', '.webm', '.mkv', '.mov'] },\n {\n kind: 'text', icon: 'file-text', mime: ['text/', 'application/json'],\n ext: ['.txt', '.md', '.markdown', '.json', '.js', '.mjs', '.ts', '.jsx', '.tsx', '.css', '.html',\n '.xml', '.yaml', '.yml', '.toml', '.ini', '.log', '.csv', '.py', '.rb', '.go', '.rs', '.sh', '.c', '.h', '.cpp', '.java'],\n },\n];\n\nfunction matchesCategory(cat, ext, ct) {\n if (cat.ext.includes(ext)) return true;\n // A mime entry ending in '/' is a prefix (audio/), otherwise an exact type.\n return cat.mime.some((m) => (m.endsWith('/') ? ct.startsWith(m) : ct === m));\n}\n\n/** Classify an item → 'audio'|'image'|'video'|'text'|'file'. */\nexport function kindOf(node) {\n const ext = extOf(node);\n const ct = node?.contentType || '';\n for (const cat of CATEGORIES) if (matchesCategory(cat, ext, ct)) return cat.kind;\n return 'file';\n}\n\nconst ICONS = { ...Object.fromEntries(CATEGORIES.map((c) => [c.kind, c.icon])), file: 'file' };\n\n/** The icon name for a node, derived from its kind. */\nexport function iconForKind(node) {\n return ICONS[kindOf(node)] || 'file';\n}\n\n/**\n * The key an indexer writes a tile picture under, and the ONE key the grid looks for.\n *\n * A preset name rather than a per-plugin registration, because a thumbnail is not a\n * contribution TYPE — it is a fact about a file that any indexer may happen to know. The\n * audiobook plugin extracts cover art from an m4b's `covr` atom and an LPF's manifest;\n * a PDF indexer could write its first page under the same key and the grid would draw it\n * with no change here.\n *\n * @see plugins/audiobook/src/coverIndexer.js\n */\nexport const THUMBNAIL_KEY = 'thumbnail';\n\n/**\n * A picture to put on this node's tile, or null.\n *\n * Contributions are namespaced by contributor, and a view deliberately does not care WHICH\n * one supplied it: the first that did wins, and a drive with two thumbnail indexers for one\n * file type has a configuration problem rather than a rendering one.\n *\n * TWO SHAPES, because a thumbnail is either already somewhere or it is not:\n *\n * { range: {start, end}, contentType } the bytes live in the FILE — an m4b's cover art\n * sits in its `covr` atom — so the contribution\n * points at them. Eighty bytes on the wire instead\n * of a base64 copy on every listing.\n * { src } a self-contained URL, for the cases with nothing\n * to point at. Small by construction; see the\n * indexer's cap.\n *\n * @returns {{range?: {start: number, end: number}, src?: string, contentType?: string}|null}\n */\nexport function thumbnailOf(node) {\n // ALREADY RESOLVED, which is how a recents entry carries one. Recents are a snapshot in\n // localStorage rather than a reference — nothing re-reads the node — so the descriptor\n // is stored on the entry itself and this is where it comes back in. Same shape, so a\n // view cannot tell the two apart, which is the point.\n const stored = node?.thumbnail;\n if (typeof stored?.src === 'string' && stored.src) return stored;\n if (Number.isFinite(stored?.range?.start) && Number.isFinite(stored?.range?.end)) return stored;\n\n const contributions = node?.contributions;\n if (!contributions) return null;\n for (const contribution of Object.values(contributions)) {\n const thumb = contribution?.metadata?.[THUMBNAIL_KEY];\n if (typeof thumb?.src === 'string' && thumb.src) return thumb;\n if (Number.isFinite(thumb?.range?.start) && Number.isFinite(thumb?.range?.end)) return thumb;\n }\n return null;\n}\n\n/** Whether a node holds indexable text (drives offline text extraction). */\nexport function isTexty(node) {\n return kindOf(node) === 'text';\n}\n",
|
|
46
46
|
"// Opener choice: which viewer opens a file when several can. Built-in and plugin\n// openers register the same way (a selector + priority), so a file can match more\n// than one — e.g. a plugin PDF viewer alongside a built-in, or a rich player vs the\n// plain audio player for an .m4a. When that happens and the user hasn't expressed a\n// preference, we ask; their choice can be remembered per file type.\n//\n// Preferences live in settings under `openers.associations`: a map from a *type key*\n// (an extension like \".pdf\", an exact mime, or a \"type/*\" wildcard) to an opener id.\n\nimport { selectorMatches } from '@3sln/trove/core/util.js';\nimport { extOf } from './fileType.js';\n\nexport const ASSOC_KEY = 'openers.associations';\n\nexport { extOf };\n\n/**\n * One opener as the chooser and the switcher need to see it: what it is called, what it\n * claims, and where it came from.\n *\n * `source` is resolved here because it needs the plugin host to answer, which a component\n * has no business holding. `match` stays so the selector can be applied later, by\n * `openersFor`, against a node the caller already has.\n *\n * No `component`, only because nothing on this path renders — both callers are picking\n * between openers, not drawing with one. (A renderer would be fine to pass: it is a pure\n * vnode builder. See the `views` query, which does exactly that.)\n */\nexport function describeOpener(opener, plugins) {\n return {\n id: opener.id,\n title: opener.title ?? opener.name ?? opener.id,\n match: opener.match ?? null,\n priority: opener.priority ?? 0,\n pluginId: opener.pluginId ?? null,\n source: opener.pluginId\n ? (plugins?.plugins?.get(opener.pluginId)?.manifest?.displayName || opener.pluginId)\n : 'Built-in',\n };\n}\n\n/**\n * Which of these openers claim this node, best first.\n *\n * Pure, and deliberately so — see the `openers` query. Every reactive decision (when-clause,\n * plugin health, priority order) has already been made; all that is left is running a\n * selector over a file, which needs nothing but its two arguments.\n */\nexport function openersFor(openers, node) {\n return (openers || []).filter((o) => selectorMatches(o.match, node));\n}\n\n/** The canonical type key we remember a choice under: prefer extension, else mime. */\nexport function typeKeyFor(node) {\n return extOf(node) || node?.contentType || '';\n}\n\n/** A human label for the type, for \"Always use … for {label}\". */\nexport function typeLabelFor(node) {\n const ext = extOf(node);\n if (ext) return `${ext} files`;\n const mime = node?.contentType || '';\n return mime ? `${mime} files` : 'this file type';\n}\n\n/**\n * All openers that can handle this node right now (selector + when + availability),\n * best (highest priority) first — for an ACTION, which holds the resources to ask.\n *\n * The render layer gets the same answer the other way round: the `openers` query resolves\n * when/availability, `openersFor` applies the selector. Both end at `describeOpener`, so\n * the opener-chooser dialog looks the same whichever side opened it.\n */\nexport function availableOpeners(r, node) {\n return r.contributions\n .openersFor(node)\n .filter((o) => (!o.when || r.context.evaluate(o.when)) && r.plugins.isAvailable(o))\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((o) => describeOpener(o, r.plugins));\n}\n\n/** The remembered opener id for a node's type (ext → exact mime → type/* ), or null. */\nexport function rememberedOpenerId(r, node) {\n const assoc = r.settings.get(ASSOC_KEY) || {};\n const ext = extOf(node);\n const mime = node?.contentType || '';\n const wild = mime.includes('/') ? `${mime.slice(0, mime.indexOf('/') + 1)}*` : '';\n return (ext && assoc[ext]) || (mime && assoc[mime]) || (wild && assoc[wild]) || null;\n}\n\n/**\n * The associations with one type key changed, or removed with a null openerId.\n *\n * Returns the next map rather than writing it: the write is `RememberOpenerAction`'s, and\n * keeping the arithmetic separate from the effect is what lets both the settings screen and\n * the opener chooser reach it without either touching `settings`.\n */\nexport function withAssociation(assoc, typeKey, openerId) {\n const next = { ...(assoc || {}) };\n if (openerId) next[typeKey] = openerId;\n else delete next[typeKey];\n return next;\n}\n",
|
|
47
47
|
"// `trove:` — the URI that addresses an ITEM in the drive.\n//\n// There is no folder hierarchy. A collection is a flat namespace of uniquely-named\n// items, and structure comes from items linking to each other — a markdown document\n// that links its sources is what a folder used to be, except it can say *why* things\n// belong together, an item can appear in several of them, and the grouping is\n// searchable content rather than an invisible container.\n//\n// So a link has to be something a person can type into a markdown file:\n//\n// trove:default?name=sailing.txt canonical, by name\n// trove:default/sailing.txt shorthand for the same thing\n// trove:default?id=fil_01H2X8F4KQ by id — survives a rename, unreadable\n//\n// The selector is EXPLICIT (`?name=` vs `?id=`) rather than inferred from the shape\n// of the segment: a name that happens to look like an id would otherwise resolve to\n// something else entirely, and a link that silently retargets is worse than one that\n// visibly breaks. The `/name` shorthand is unambiguous for the same reason — that\n// slot only ever means a name.\n//\n// Names are unique per collection, which is what makes `?name=` resolve to exactly one\n// item. Renaming therefore breaks inbound links, on purpose and visibly: the alternative\n// is opaque ids nobody can hand-write, which would put linking back in the UI's hands.\n// `?id=` is there for links a tool inserts, where stability matters more than legibility.\n\nimport { TroveError } from './errors.js';\n\nexport const TROVE_SCHEME = 'trove:';\n\n// An item name is capped at 255 chars (isValidItemName), so a longer selector can never\n// resolve to anything. Refusing it at parse time keeps garbage out of the links index\n// rather than storing kilobytes that will never match.\nconst MAX_SELECTOR = 255;\n// How many distinct links one item may record. A document is a grouping, not a database\n// dump; past this the value is in the search index, not the link graph. Not exported: it\n// is the default for `extractTroveLinks`'s `limit`, and nothing outside chose a different\n// one — an exported cap nobody passes reads as a knob when it is a constant.\nconst MAX_LINKS_PER_ITEM = 500;\n\n// Collection ids are slugs (see CollectionService); a name is anything but a slash,\n// since the pathname shorthand has to stop somewhere.\nconst COLLECTION_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;\n\n/**\n * Parse a `trove:` URI into `{ collection, by: 'name'|'id', value }`, or null if it\n * isn't one. Never throws — callers parse untrusted document text with this, where a\n * malformed link is a thing to render as broken, not an exception.\n */\nexport function parseTroveUri(uri) {\n if (typeof uri !== 'string' || !uri.toLowerCase().startsWith(TROVE_SCHEME)) return null;\n let url;\n try {\n url = new URL(uri);\n } catch {\n return null;\n }\n // `trove:default/sailing.txt` → pathname \"default/sailing.txt\"; the slash-free case\n // is `trove:default?name=…`, where the whole pathname is the collection.\n const path = url.pathname;\n const slash = path.indexOf('/');\n const collection = slash < 0 ? path : path.slice(0, slash);\n if (!COLLECTION_RE.test(collection)) return null;\n\n const id = url.searchParams.get('id');\n const name = url.searchParams.get('name');\n let shorthand = '';\n if (slash >= 0) {\n // A malformed percent-escape is a malformed link, not an exception to propagate\n // out of a document render.\n try { shorthand = decodeURIComponent(path.slice(slash + 1)); } catch { return null; }\n }\n\n // Both selectors at once is a contradiction, not something to silently pick between.\n if (id != null && (name != null || shorthand)) return null;\n const by = id != null ? 'id' : 'name';\n const value = id != null ? id : (name != null ? name : shorthand);\n if (!value || value.length > MAX_SELECTOR) return null;\n return { collection, by, value };\n}\n\n/** Whether `uri` is a well-formed trove: reference. */\nexport function isTroveUri(uri) {\n return parseTroveUri(uri) != null;\n}\n\n/**\n * The canonical string for one address. The ONE place the template lives.\n *\n * There were five hand-written copies of it, which is five chances to get the encoding or\n * the separator subtly different — and `canonicalTroveUri`, whose whole docstring is\n * \"two links that address the same item by the same selector must produce the same\n * string\", was one of the copies rather than the source.\n */\nexport function formatTroveUri({ collection, by, value }) {\n return `${TROVE_SCHEME}${collection}?${by}=${encodeURIComponent(value)}`;\n}\n\n/**\n * Build a `trove:` URI. `by` defaults to 'name' — the legible form, which is what\n * gets written into documents; pass 'id' for a link that must survive a rename.\n */\nexport function troveUri(node, by = 'name') {\n const collection = node?.collectionId || 'default';\n if (by === 'id') {\n if (!node?.id) throw TroveError.invalid('trove: link by id needs a node id');\n return formatTroveUri({ collection, by: 'id', value: node.id });\n }\n if (!node?.name) throw TroveError.invalid('trove: link by name needs a node name');\n return formatTroveUri({ collection, by: 'name', value: node.name });\n}\n\n/**\n * Every distinct `trove:` reference in a block of text, in first-appearance order.\n *\n * Deliberately scans raw text rather than parsing markdown: a link is just as real in\n * an HTML `href`, a bare mention, or a front-matter list, and the point of extraction\n * is to know what an item references — not to reproduce one renderer's idea of a link.\n * Trailing punctuation is trimmed so `see trove:default/a.md.` doesn't capture the dot.\n */\nexport function extractTroveLinks(text, { limit = MAX_LINKS_PER_ITEM } = {}) {\n if (typeof text !== 'string' || !text) return [];\n const out = [];\n const seen = new Set();\n // Stop at whitespace and at the delimiters that wrap a URL in markdown/HTML.\n const re = /trove:[^\\s<>\"'`)\\]}]+/gi;\n for (const m of text.matchAll(re)) {\n if (out.length >= limit) break;\n const raw = m[0].replace(/[.,;:!?]+$/, '');\n const parsed = parseTroveUri(raw);\n if (!parsed) continue;\n const canonical = formatTroveUri(parsed);\n if (seen.has(canonical)) continue;\n seen.add(canonical);\n out.push({ uri: canonical, raw, ...parsed });\n }\n return out;\n}\n\n/**\n * The canonical form of a reference, for storing and comparing. Two links that address\n * the same item by the same selector must produce the same string, or backlinks would\n * miss `trove:default/a.md` when the target stored `trove:default?name=a.md`.\n */\nexport function canonicalTroveUri(uri) {\n const p = parseTroveUri(uri);\n return p ? formatTroveUri(p) : null;\n}\n\n/** Both canonical forms an item can be addressed by — what a backlink query looks for. */\nexport function troveUrisFor(node) {\n const out = [];\n if (node?.collectionId && node?.name) out.push(troveUri(node, 'name'));\n if (node?.collectionId && node?.id) out.push(troveUri(node, 'id'));\n return out;\n}\n\n// --- shareable web links -------------------------------------------------------\n//\n// `trove:` addresses an item INSIDE the drive: it is what one document writes to link\n// another, and it means nothing to a browser. A share link is the other half — a URL you\n// can paste into a message so that someone else's browser opens the same item.\n//\n// They are deliberately the same addressing, not two competing schemes. A share link is a\n// `trove:` URI wearing an http(s) coat: same collection, same explicit `name`-or-`id`\n// selector, same refusal to infer which one you meant. So anything that can already\n// resolve a `trove:` URI can resolve a share link by parsing it back, and a rename breaks\n// both in the same visible way rather than one silently retargeting.\n//\n// The path form — /c/<collection>/i/<selector> — rather than the query form\n// `?coll=&item=`. Both put the ids in the URL and therefore in server logs and browser\n// history, so that is not the difference; the path reads as a location, survives being\n// truncated in a chat client more gracefully, and leaves the query string free for the\n// things that genuinely are parameters.\n//\n// Nothing secret ever rides in one. An encrypted collection's key is not in the link and\n// must not be: a link is pasted into chats, logged by proxies, and kept in history\n// forever. The recipient gets the item because they are allowed the collection, which is\n// the same rule as everywhere else here.\n\n/** The path a share link uses. Exported so a client router and the server agree. */\nexport const SHARE_PATH = '/c';\n\n/**\n * A URL that opens this item in a browser.\n *\n * @param {object} node\n * @param {string} [origin] where the drive is served; omitted gives a root-relative link\n * @param {'name'|'id'} [by] `name` reads better and breaks on rename; `id` is the reverse\n */\nexport function shareUrl(node, origin = '', by = 'name') {\n if (!node?.collectionId) throw TroveError.invalid('An item needs a collection to be linked to');\n const selector = by === 'id'\n ? `id:${node.id}`\n : encodeURIComponent(node.name);\n if (!selector || (by === 'id' && !node.id)) throw TroveError.invalid('Nothing to link to');\n const path = `${SHARE_PATH}/${encodeURIComponent(node.collectionId)}/i/${selector}`;\n return origin ? `${String(origin).replace(/\\/$/, '')}${path}` : path;\n}\n\n/**\n * Read a share link back, from a full URL or just a path.\n *\n * Returns the same shape `parseTroveUri` does, so a caller resolves either without caring\n * which it was handed. Null rather than a throw: this parses whatever was in the address\n * bar, and a URL that is not a share link is an ordinary page, not an error.\n */\nexport function parseShareUrl(url) {\n let path;\n try {\n path = url.startsWith('/') ? url : new URL(url).pathname;\n } catch {\n return null;\n }\n const m = /^\\/c\\/([^/]+)\\/i\\/(.+)$/.exec(path);\n if (!m) return null;\n let collection;\n let raw;\n try {\n collection = decodeURIComponent(m[1]);\n raw = decodeURIComponent(m[2]);\n } catch {\n return null; // a malformed escape is not a link to anything\n }\n if (!COLLECTION_RE.test(collection)) return null;\n // `id:` is the explicit selector, mirroring `?id=` — a name is never guessed at just\n // because it happens to look like an id.\n const byId = raw.startsWith('id:');\n const value = byId ? raw.slice(3) : raw;\n if (!value || value.length > MAX_SELECTOR) return null;\n return { collection, by: byId ? 'id' : 'name', value };\n}\n\n/** The `trove:` URI a share link denotes — the two are the same address. */\nexport function troveUriFromShareUrl(url) {\n const parsed = parseShareUrl(url);\n if (!parsed) return null;\n return formatTroveUri(parsed);\n}\n",
|
|
48
48
|
"// What is left of the data services, plus the derivations that were methods on them.\n//\n// The explorer, search and API-key services were state bags — a `state`, a `cell`, and a\n// `set` that wrote both — and are slices now (bl/state.js). TransfersService stays,\n// because it holds things a state snapshot cannot: AbortControllers, per-file retry\n// thunks closing over the File itself, and a projection into the activity list.\n//\n// The functions below were METHODS on those bags. They are derivations, so they belong to\n// whoever is asking rather than to whatever happens to hold the data.\n\nimport { cell } from '../runtime.js';\n\n\n/**\n * The nodes the selection refers to — a pure function of explorer state.\n *\n * It was a method, which meant every caller reached for the service to ask a question about\n * data it could already see. As a function it can be used two ways without either being a\n * back door: the explorer QUERY folds it into the view, so the UI is handed the answer; and\n * an effect that needs it right now computes it from the state it already holds.\n *\n * Resolving ids against `items` only finds rows on the LOADED PAGE of the CURRENT\n * collection — and the launcher's rows come from search (which the server scopes to every\n * readable collection) and from recents (which survive a collection switch). So every row\n * reached by searching resolved to nothing, and rename / move-to-trash / copy-link returned\n * silently while `explorer.hasSelection` said there was a selection. Preferring the nodes\n * the selecting caller already held fixes the whole class; the `items` lookup stays for\n * callers that only have ids.\n */\nexport function selectedNodesOf(state) {\n // Tolerant of a partial state: a view is computed on every emission, including the first\n // one, and a projection that throws takes the whole query down rather than the field.\n const selection = state?.selection || [];\n const held = state?.selectionNodes;\n if (held?.length) return held.filter((n) => selection.includes(n.id));\n return (state?.items || []).filter((i) => selection.includes(i.id));\n}\n\n\n\n/**\n * Uploads in flight.\n *\n * This owns the DETAIL an upload needs and a generic task doesn't — bytes moved, an\n * AbortController, per-file retry. It also projects each transfer into ActivityService\n * so the drive has ONE list of \"what is happening\", covering work on both sides of the\n * wire: an upload running in this browser and a reindex running on the server show up\n * together, because a user doesn't care which machine is busy.\n *\n * The projection is one-way and this stays the owner. Two writable copies of the same\n * fact is how they drift.\n */\nexport class TransfersService {\n #state;\n\n /** @param {import('./activity.js').ActivityService} [activity] */\n constructor(activity = null) {\n this.#state = { items: [] }; // { id, name, direction, ratio, loaded, total, status, error, retryable }\n this.cell = cell(this.#state);\n this._controllers = new Map();\n this.activity = activity;\n this._tasks = new Map(); // transfer id -> activity task handle\n // How to run this transfer again. Held here rather than in state because it closes\n // over the File itself, which is not something a state snapshot should carry.\n //\n // It exists because automatic retry cannot cover everything: a lost upload session is\n // `notFound`, which is correctly classified non-retryable and will never succeed on\n // its own no matter how many times it is tried. Someone has to decide to start over,\n // and the alternative is asking the user to find the file and drag it in again.\n this._retries = new Map();\n }\n /** The value, for whoever is about to decide something from it. See bl/state.js: one\n * value, one way to read it — a public `state` field is a second, writable door. */\n get() {\n return this.#state;\n }\n\n observe() {\n return this.cell;\n }\n #emit() {\n this.cell.setValue(this.#state);\n }\n /**\n * @param {{retry?: () => Promise<any>}} [opts] how to run this transfer again, if it can be\n */\n start(id, name, total, controller, { retry = null } = {}) {\n this._controllers.set(id, controller);\n if (retry) this._retries.set(id, retry);\n this.#state = {\n items: [...this.#state.items, {\n id, name, direction: 'up', ratio: 0, loaded: 0, total, status: 'active', error: null,\n // Surfaced in state so the tray renders from a snapshot rather than interrogating\n // the service — it is a fact about the row, like `status`.\n retryable: !!retry,\n }],\n };\n this.#emit();\n this.#task(id, name, total);\n }\n\n #task(id, name, total) {\n const task = this.activity?.start({\n kind: 'transfer', title: `Uploading ${name}`, total: total || null, unit: 'bytes',\n onCancel: () => this.cancel(id),\n });\n if (task) this._tasks.set(id, task);\n }\n\n /**\n * Run a failed transfer again, in place.\n *\n * The same row rather than a new one: a retry is another attempt at the thing the user\n * already asked for, and a tray that grew an entry per attempt would report one upload\n * as four.\n */\n retry(id) {\n const again = this._retries.get(id);\n if (!again) return null;\n const item = this.#state.items.find((t) => t.id === id);\n if (!item || item.status === 'active') return null;\n return again();\n }\n\n /** Put an existing row back into flight — see `retry`. */\n restart(id, controller) {\n this._controllers.set(id, controller);\n const item = this.#state.items.find((t) => t.id === id);\n this.#state = {\n items: this.#state.items.map((t) => (t.id === id\n ? { ...t, status: 'active', error: null, ratio: 0, loaded: 0 }\n : t)),\n };\n this.#emit();\n // A fresh activity task: the previous one already ended as failed, and reporting\n // progress into a finished task would leave the panel showing a failure that is\n // actively being retried.\n this.#task(id, item?.name || 'file', item?.total || null);\n }\n progress(id, { loaded, total, ratio }) {\n this.#state = { items: this.#state.items.map((t) => (t.id === id ? { ...t, loaded, total, ratio } : t)) };\n this.#emit();\n this._tasks.get(id)?.progress({ done: loaded, total: total || null });\n }\n finish(id, status = 'done', error = null) {\n this.#state = { items: this.#state.items.map((t) => (t.id === id ? { ...t, status, error, ratio: status === 'done' ? 1 : t.ratio } : t)) };\n this._controllers.delete(id);\n this.#emit();\n const task = this._tasks.get(id);\n if (task) {\n if (status === 'done') task.succeed();\n else if (status === 'cancelled') task.cancel();\n else task.fail(error || new Error('Upload failed'));\n this._tasks.delete(id);\n }\n if (status === 'done') setTimeout(() => this.dismiss(id), 4000);\n }\n cancel(id) {\n this._controllers.get(id)?.abort();\n this.finish(id, 'cancelled');\n }\n dismiss(id) {\n this.#state = { items: this.#state.items.filter((t) => t.id !== id) };\n this._retries.delete(id);\n this.#emit();\n }\n clearDone() {\n const kept = this.#state.items.filter((t) => t.status === 'active');\n const keptIds = new Set(kept.map((t) => t.id));\n // Drop the retry thunks of the rows that just left, so a dismissed upload does not\n // hold its File alive for the rest of the session.\n for (const id of [...this._retries.keys()]) if (!keptIds.has(id)) this._retries.delete(id);\n this.#state = { items: kept };\n this.#emit();\n }\n}\n\n\n/**\n * The API-key draft as the API wants it, or null when it would grant nothing.\n *\n * A pure function rather than a method, for the same reason as `selectedNodesOf`: it is a\n * derivation, so it belongs to the view that shows it and to the action that submits it,\n * not to the resource that happens to hold the draft.\n */\nexport function draftScopesOf(state) {\n const caps = state?.draft?.caps || {};\n const scopes = Object.entries(caps)\n .filter(([, list]) => list.length)\n .map(([collectionId, capabilities]) => ({ collectionId, capabilities }));\n return scopes.length ? scopes : null;\n}\n\n\n/**\n * The collection switcher's menu, derived from what the explorer knows.\n *\n * A pure function for the same reason as `selectedNodesOf`: it answers a question about\n * state, so it belongs to the view that shows it. It used to be a closure hung on `app` by\n * `registerCommands` — reachable only through that one field, and impossible to see from\n * the component that rendered it.\n *\n * Items carry `actions`, like every other menu item; see ui/activate.js.\n *\n * @param {object} state explorer state\n * @param {(id?: string) => object} switchTo builds the action for picking a collection\n * @param {() => object} create builds the action for making a new one\n */\n/**\n * The administration screen's row per collection.\n *\n * Built here rather than in the component for the same reason `collectionMenuOf` is: these\n * rows carry ACTIONS, and deciding which actions a collection offers is a question about\n * the collection, not about rendering. A component that assembled them would have to know\n * that rotation lives behind Settings and that scanning applies to the OPEN collection.\n *\n * `scan` and `rotate` are sequenced pairs — switch first, then do the thing — because both\n * operate on whatever is open. That is what makes them work from a screen that lists every\n * collection rather than only the current one. Rotation routes to Settings rather than\n * starting one: the estimate and the confirmation live there, and a rotation begun without\n * seeing its cost is exactly the button nobody should have.\n */\nexport function collectionAdminOf(state, { open, scan, rotate, create, access }) {\n const current = state?.collectionId;\n const rows = (state?.collections || []).map((c) => ({\n id: c.id,\n name: c.name || c.id,\n driver: c.driver || 'unknown',\n system: !!c.system,\n current: c.id === current,\n // `describeEncryption` gives the fingerprint and nothing secret, so this is safe to show\n // and is the only way to tell two keys apart across a rotation.\n fingerprint: c.encryption?.fingerprint || null,\n encrypted: !!c.encryption,\n capabilities: c.capabilities || [],\n actions: {\n open: [open(c.id)],\n scan: [open(c.id), scan()],\n rotate: c.encryption ? [open(c.id), rotate()] : null,\n // Access needs no switch: the ACL is read by collection id, not by what is open.\n access: c.capabilities?.includes('admin') ? [access(c.id)] : null,\n },\n }));\n return { rows, canCreate: !!state?.canCreateCollection, create: [create()] };\n}\n\nexport function collectionMenuOf(state, switchTo, create) {\n // No fallback: this only decides which row gets a tick, and with nothing open the answer\n // is that none of them do. `|| 'default'` ticked a collection the user had not chosen,\n // and on a drive with one actually called \"default\", the wrong one.\n const current = state?.collectionId;\n const items = (state?.collections || []).map((c) => ({\n label: c.name || c.id,\n icon: c.id === current ? 'check' : 'files',\n actions: [switchTo(c.id)],\n }));\n if (state?.canCreateCollection) {\n if (items.length) items.push({ sep: true });\n items.push({ label: 'New collection…', icon: 'plus', actions: [create()] });\n }\n return items;\n}\n",
|
|
@@ -50,12 +50,12 @@
|
|
|
50
50
|
"// The drive's own state, as named slices.\n//\n// These were classes: an `ExplorerService`, a `SearchClientService`, an `ApiKeysService`,\n// each holding a `state` field, a `cell`, and a `set` that wrote both. Nothing else. A\n// service should cover something complex and offer it through a narrow door — these\n// covered an object.\n//\n// Two things came of that shape and both are gone with it.\n//\n// TWO DOORS. Actions read `.state` and queries read `.cell`, and the two are only equal by\n// habit: most services wrote `this.state = {...}; this.cell.setValue(this.state)`, but not\n// all did, and `settings` still has a cell holding `effective()` and no `state` field at\n// all. A slice has one value and one way to read it.\n//\n// LOGIC IN THE HOLDER. `toggleCap` computed a capability set inside the service while an\n// action stood in front of it forwarding two arguments — and dropped one of them, which is\n// how a minted key came to be rejected by the server. Arithmetic over state belongs to the\n// action that decides to change it; the slice only holds.\n//\n// Each slice is still its OWN provider, so `static deps = ['explorer']` keeps meaning what\n// it says. A single `appState` covering everything would put the whole drive back behind\n// one lease, which is what naming the resources individually was for.\n\nimport { cell } from '../runtime.js';\n\n/**\n * One named piece of the drive's state.\n *\n * `set` merges, because every caller was already merging and doing it here removes the\n * chance of a caller replacing a slice by forgetting to spread it. There is no `replace`:\n * one existed for \"the cases that genuinely mean all of it\" and no caller ever turned out\n * to mean that, so a slice has exactly one way to be written.\n *\n * @param {object} initial\n */\nexport function slice(initial = {}) {\n const held = cell(initial);\n return {\n /** The cell, for a query to watch. */\n observe: () => held,\n /** The value, for an action about to decide something from it. */\n get: () => held.getValue(),\n /** Merge a patch in. A new object every time — a cell compares with Object.is. */\n set: (patch) => held.setValue({ ...held.getValue(), ...patch }),\n };\n}\n\n/** Items, selection, the open collection, and the gate. */\nexport const explorerState = (settings) => slice({\n items: [], loading: false, error: null,\n selection: [], sort: settings.get('explorer.sort'), order: settings.get('explorer.sortOrder'),\n // No collection until one is chosen or created. `gate` is 'create' | 'choose' | null —\n // when set, it is the ONLY thing the workbench shows, because every request needs a\n // collection and there is nothing sensible to render without one.\n collectionId: null, collections: [], canCreateCollection: false, gate: null,\n // `stats` is the whole collection; `items` is the page on screen. Keeping both is what\n // lets the UI say \"500 of 3,006\" instead of quietly claiming 500.\n stats: null, usage: null, nextCursor: null, loadingMore: false, trash: null,\n // The selected NODES, not just their ids — the primary read path in `selectedNodesOf`,\n // with `items` as the fallback for when a selection was made somewhere `items` covers.\n // That function exists to end the class of silent bug where rename/trash/copy-link\n // returned quietly while `hasSelection` said there was something to act on.\n selectionNodes: null,\n});\n\n/** Query text, results, and the palette's separate file list. */\nexport const searchState = () => slice({\n query: '', mode: 'hybrid', results: [], loading: false, error: null, ran: false,\n paletteFiles: [], paletteQuery: '', paletteLoading: false, paletteError: null,\n // `filtered` is a tag/type filter rather than a query; `offline` says the results came\n // from the local pinned index; `resolved` is the query the results on screen are FOR,\n // and it is what `pickView` reads to decide whether to show them at all.\n filtered: false, offline: false, resolved: null,\n});\n\n/**\n * The admin API-key list.\n *\n * `minted` holds the one secret a mint returns. It lives here, in memory, and is dropped\n * the moment the admin dismisses it — the server cannot show it again, so the UI is the\n * only place it ever exists and it must not outlive the tab.\n *\n * `draft` is the mint form. Held in state rather than in the DOM so the section stays a\n * pure function of state, and so a half-filled form survives a re-render caused by\n * something else on the settings screen.\n */\nexport const apiKeysState = () => slice({\n keys: [], loading: false, loaded: false, error: null, minted: null, busy: null, draft: null,\n // `forbidden` is not `error`. A non-admin's 403 is the correct answer to this request, so\n // the section is simply absent for them; anything else is a failure worth reporting, with\n // a way to try again. Conflating the two rendered a blank space for both.\n forbidden: false,\n});\n\n/**\n * What the UI is in the middle of doing — a keybinding mid-capture, text typed into a\n * dialog that has not been submitted, the boxes ticked in a plugin review.\n *\n * None of it is drive state; all of it decides what is on screen, which is what makes it\n * engine state. Keyed by component, so `set` here replaces one key rather than merging a\n * patch — see SetViewStateAction.\n */\nexport const viewState = () => slice({});\n\n/**\n * The shell's transient overlays: the command palette, a modal dialog, the right-click\n * menu, and the plugin popup panel.\n *\n * Four things that are independent of the panel stack and of each other, which is why they\n * were split out of the workbench in the first place. What they are NOT is complex enough\n * to need a service — the class was four setters and a `wrapIndex`, with an action standing\n * in front of each one. The wrapping now lives in the action that moves a cursor, which is\n * where it was needed: MovePaletteAction lost the count argument once already, precisely\n * because deciding and writing were on opposite sides of a forwarding layer.\n */\nexport const overlayState = () => slice({\n palette: null, // { mode: 'commands'|'files', query, index } when open\n dialog: null,\n contextMenu: null,\n pluginPanel: null,\n // The activity panel. It lived inside ActivityService's state, beside `tasks` and\n // `issues` — the one field there with no justification while its neighbours had five\n // lines of it — which made CloseOverlaysAction lease a task/issue poller in order to\n // close a panel, and broke form on the sixth rung of an Escape ladder whose other five\n // go through here.\n activityPanel: false,\n});\n\n/**\n * The shell itself: which activity is showing, and the launcher's own cursor.\n *\n * The panel stack is NOT here — that is NavigationService, which stays a service because it\n * mirrors the stack into browser history and persists recents, neither of which a state bag\n * can do.\n */\nexport const workbenchState = () => slice({\n activity: 'home', // home (stack) | plugins | settings\n sidebarVisible: true,\n launch: { query: '', index: 0 },\n // Which collection's access list an administrator has opened, if any. Shell state\n // rather than a component field: it decides what is on screen.\n aclFor: null,\n searchModal: false, // the double-shift modal search overlay\n // Phone chrome: which bottom sheet is up, if any ('status' | 'more'). A phone has no room\n // for a permanent status bar or a left rail, so both fold into a sheet pulled up on demand.\n sheet: null,\n infoPanel: false,\n});\n\n/** Wrap a list cursor by `delta` within `[0, count)` — the palette and the launcher share it. */\nexport function wrapIndex(index, delta, count) {\n return (index + delta + count) % count;\n}\n\n/**\n * What the open collection's key is doing.\n *\n * Rotation is long-running and lives on the server, so this is a local view of it kept in\n * step by polling while the settings screen is open — see `RotationQuery`. It is state\n * rather than a fetch-per-render because two things read it (the progress line and whether\n * Start is offered) and they must not disagree.\n */\n/**\n * Who may do what on one collection, while an administrator is looking at it.\n *\n * Keyed by collection like the rotation slice next door, and for the same reason: the\n * answer belongs to a collection rather than to the drive, so switching is a different\n * question rather than a change to notice.\n */\nexport const aclState = () => slice({\n collectionId: null, grants: [], admins: [], loading: false, error: null, busy: false,\n});\n\nexport const rotationState = () => slice({\n collectionId: null, rotation: null, estimate: null, loading: false, error: null, busy: false,\n});\n",
|
|
51
51
|
"// ngin Actions — the workbench's business logic as thin, dispatchable verbs\n// (CQRS-style). Each depends on the `app` provider (platform + reactive\n// services) and performs one user intent: navigate, mutate the tree, upload,\n// search, open a file. Errors surface as notifications; the reactive services\n// they update flow straight back into the UI via `watch`.\n\nimport { Action } from '@3sln/ngin';\nimport { runAction } from '../dispatch.js';\nimport { PROMPT, PLUGIN_REVIEW } from './viewState.js';\nimport { beginInstallFromUrl } from './pluginInstall.js';\nimport { newId } from '@3sln/trove/core/util.js';\nimport { matchesTagFilters } from './tagQuery.js';\nimport { availableOpeners, rememberedOpenerId, withAssociation, ASSOC_KEY } from './openers.js';\n// A share link and a `trove:` URI are the same address in two spellings — see core/links.js.\nimport { parseShareUrl, troveUri, shareUrl } from '@3sln/trove/core/links.js';\nimport { selectedNodesOf, draftScopesOf, collectionMenuOf } from './services.js';\nimport { beginInstallFromFile } from './pluginInstall.js';\nimport { pickFiles, pickZip, triggerDownload } from '../platform/pickers.js';\nimport { wrapIndex } from './state.js';\n\n/**\n * Load a collection's items. There is nothing to navigate INTO any more — a drive is\n * browsed by search and by following links — so this only ever switches which\n * collection is on screen, or refreshes the current one.\n */\nexport class NavigateAction extends Action {\n static deps = ['api', 'explorer', 'notifications', 'settings'];\n\n constructor(collectionId) {\n super();\n this.collectionId = collectionId;\n }\n async execute(r) {\n const { api, explorer, notifications, settings } = r;\n // No `|| 'default'`. Navigating nowhere in particular used to land on a collection\n // that may not exist and may not be readable; now it is a bug in the caller, said out\n // loud rather than papered over with a guess.\n const collectionId = this.collectionId || explorer.get().collectionId;\n if (!collectionId) {\n explorer.set({ loading: false, gate: 'choose' });\n return;\n }\n const switching = collectionId !== explorer.get().collectionId;\n // A collection's trash belongs to that collection. Carrying it across a switch\n // listed the OLD collection's deleted files under the new one — above an \"Empty\n // trash\" button that purges the new one, so the rows and the button disagreed\n // about which drive they were talking about.\n explorer.set({ loading: true, error: null, collectionId, ...(switching ? { trash: null } : {}) });\n try {\n const sort = settings.get('explorer.sort');\n const order = settings.get('explorer.sortOrder');\n const res = await api.list(collectionId, { sort, order });\n explorer.set({\n items: res.items, loading: false, selection: [], sort, order,\n collectionId: res.collectionId || collectionId,\n // What the COLLECTION holds, as against the page we were handed. Reporting the\n // page length would tell someone with 3,000 files that they have 500.\n stats: res.stats || null,\n usage: res.usage || null,\n nextCursor: res.nextCursor || null,\n });\n // Remember where they were, so the next visit opens there rather than guessing.\n settings.set('explorer.lastCollection', collectionId);\n explorer.set({ gate: null });\n // Explorer→context projection (collectionId/hasSelection) lives in bl/index.js\n // so it stays in sync with selection too — nothing to mirror here.\n } catch (err) {\n explorer.set({ loading: false, error: err.message });\n notifications.error(`Couldn't load this collection: ${err.message}`);\n }\n }\n}\n\nexport class LoadCollectionsAction extends Action {\n static deps = ['api', 'explorer'];\n\n async execute(r) {\n try {\n const res = await r.api.collections();\n const collections = res.collections || [];\n r.explorer.set({ collections, canCreateCollection: !!res.canCreate });\n return collections;\n } catch { /* collections disabled */ return []; }\n }\n}\n\n/**\n * Open the drive the user should land on.\n *\n * NOT simply 'default'. On a multi-user deployment plenty of people have no access to\n * the default collection at all, and starting there shows them a permission error\n * instead of their own files — the drive appears broken to the exact users for whom it\n * is working correctly. So: keep the last collection if it is still readable, otherwise\n * take the first one they can actually see.\n */\nexport class OpenInitialCollectionAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'settings'];\n\n async execute(r) {\n // A share link decides where we land, ahead of everything below.\n //\n // Arriving at a link to a specific item and being asked which collection you would\n // like to open would be absurd — the link already said. So this runs before the\n // remembered choice and before the gate, and only falls through to them when the URL\n // is not a share link or cannot be honoured.\n const shared = parseShareUrl(typeof location !== 'undefined' ? location.pathname : '');\n if (shared) return this.#openShared(r, shared);\n\n // Calls the API directly rather than dispatching LoadCollectionsAction: ngin's\n // dispatch() returns an event feed, not the action's value, so awaiting it would\n // hand back an EventTarget and this would fail in a way nothing reports.\n let collections = [];\n let canCreate = false;\n try {\n const res = await r.api.collections();\n collections = res.collections || [];\n canCreate = !!res.canCreate;\n r.explorer.set({ collections, canCreateCollection: canCreate });\n } catch (err) {\n r.explorer.set({ loading: false, error: `Couldn't load your collections: ${err.message}` });\n return;\n }\n\n const ids = collections.map((c) => c.id);\n const remembered = r.settings.get('explorer.lastCollection');\n\n // Nothing exists yet. Two different situations that used to read as one:\n if (!ids.length) {\n r.explorer.set({\n loading: false, items: [], collections: [],\n // Someone who may create one is on a fresh drive and should be asked to. Someone\n // who may not has no grants, and telling them to create a collection they cannot\n // create is worse than telling them nothing.\n gate: canCreate ? 'create' : null,\n error: canCreate\n ? null\n : 'You do not have access to any collections yet. Ask an administrator to grant you one.',\n });\n return;\n }\n\n // There is no fallback to a first or a favourite. Landing somewhere the user did not\n // pick is how the old 'default' behaved, and on a shared drive it opened a collection\n // plenty of people could not read — a permission error presented as their drive.\n // A remembered choice is theirs; anything else is a question.\n if (!remembered || !ids.includes(remembered)) {\n r.explorer.set({ loading: false, items: [], gate: 'choose', error: null });\n return;\n }\n\n r.explorer.set({ gate: null });\n return r.engine.dispatch(new NavigateAction(remembered));\n }\n\n /**\n * Open the collection and item a share link names.\n *\n * Every way this can fail says which way it failed. A link to a collection you cannot\n * read, and a link to an item that has been renamed, are different problems with\n * different answers, and both used to be indistinguishable from an empty drive.\n */\n async #openShared(r, shared) {\n const { api, engine, explorer, notifications } = r;\n // The URL is consumed rather than kept. The app does not otherwise reflect its state\n // in the address bar, so leaving a share path there would go stale the moment the user\n // navigated anywhere — a URL that lies is worse than one that is merely uninformative.\n if (typeof history !== 'undefined') history.replaceState(null, '', '/');\n\n let collections = [];\n try {\n const res = await api.collections();\n collections = res.collections || [];\n explorer.set({ collections, canCreateCollection: !!res.canCreate });\n } catch (err) {\n explorer.set({ loading: false, error: `Couldn’t load your collections: ${err.message}` });\n return;\n }\n\n if (!collections.some((c) => c.id === shared.collection)) {\n // Said plainly rather than shown as an empty drive. The recipient may simply not\n // have been granted this collection, and that is worth knowing rather than guessing.\n explorer.set({\n loading: false, items: [], gate: null,\n error: `This link points at a collection you do not have access to (“${shared.collection}”). Ask whoever shared it to grant you access.`,\n });\n return;\n }\n\n explorer.set({ gate: null });\n // Sequenced, so the panel this opens below lands on top of the collection rather than\n // racing its load — see src/dispatch.js for why a bare `await` here did nothing.\n await runAction(engine, new NavigateAction(shared.collection));\n\n let node;\n try {\n // `stat` answers `{ node }` rather than the node — see bl/links.js, which unwraps it\n // the same way. Reading `.id` off the envelope silently looks like \"not found\".\n const res = shared.by === 'id'\n ? await api.stat(shared.value)\n : await api.stat(shared.value, { collection: shared.collection });\n node = res?.node || null;\n } catch {\n node = null;\n }\n if (!node?.id) {\n // A link by name breaks on rename, deliberately and visibly. Saying so beats\n // landing in the right collection with no explanation of what was expected.\n notifications.warn(\n shared.by === 'name'\n ? `“${shared.value}” is not in this collection any more — it may have been renamed or removed.`\n : 'That item no longer exists.',\n );\n return;\n }\n engine.dispatch(new OpenFileAction(node, { reset: true }));\n }\n}\n\n/**\n * Uninstall a plugin.\n *\n * An action rather than a closure threaded through the render tree. Uninstalling is engine\n * work — it is not a render concern in any sense — and it had exactly one call site,\n * reached by carrying a function through fourteen modules of components that had no use\n * for it except to hand it to their children.\n */\n/**\n * Run a command.\n *\n * Commands used to be invoked straight on the command service, which meant every command a\n * user ran from the UI — every menu item, every keybinding, every palette entry — went\n * around the engine rather than through it. Nothing could intercept one, nothing could\n * observe one, and the engine's own view of what the app was doing had a hole in it exactly\n * the shape of everything a person actually did.\n *\n * Running one is an action like any other, so it is one.\n *\n * The command's return value is not available here — `dispatch` answers with an event feed\n * rather than the handler's result. That costs nothing today: every one of the call sites\n * is fire-and-forget, and a command that needs to answer its caller wants a query.\n */\nexport class ExecCommandAction extends Action {\n static deps = ['commands'];\n constructor(id, ...args) {\n super();\n this.id = id;\n this.args = args;\n }\n async execute({ commands }) {\n return commands.execute(this.id, ...this.args);\n }\n}\n\nexport class UninstallPluginAction extends Action {\n static deps = ['notifications', 'plugins'];\n\n constructor(pluginId) {\n super();\n this.pluginId = pluginId;\n }\n async execute(r) {\n try {\n await r.plugins.uninstall(this.pluginId);\n } catch (err) {\n r.notifications.error(`Couldn’t uninstall: ${err.message}`);\n }\n }\n}\n\nexport class CreateCollectionAction extends Action {\n static deps = ['api', 'engine', 'notifications'];\n\n constructor(record) {\n super();\n this.record = record;\n }\n async execute(r) {\n try {\n const res = await r.api.createCollection(this.record);\n r.notifications.success(`Created collection “${res.collection.name}”`);\n // Sequenced: `NavigateAction` writes `collectionId` synchronously while the load\n // writes `collections` after a round trip, so navigating first left the status bar's\n // `collectionLabelOf` with nothing to look the id up in — it showed a raw `col_…`.\n await runAction(r.engine, new LoadCollectionsAction());\n r.engine.dispatch(new NavigateAction(res.collection.id));\n } catch (err) {\n r.notifications.error(`Couldn’t create collection: ${err.message}`);\n }\n }\n}\n\n/** Append the next page of a collection to what's already on screen. */\nexport class LoadMoreAction extends Action {\n static deps = ['api', 'explorer', 'notifications'];\n\n async execute(r) {\n const { api, explorer, notifications } = r;\n const cursor = explorer.get().nextCursor;\n if (!cursor || explorer.get().loadingMore) return;\n explorer.set({ loadingMore: true });\n try {\n const res = await api.list(explorer.get().collectionId, {\n sort: explorer.get().sort, order: explorer.get().order, cursor,\n });\n explorer.set({\n items: [...explorer.get().items, ...res.items],\n nextCursor: res.nextCursor || null,\n loadingMore: false,\n });\n } catch (err) {\n explorer.set({ loadingMore: false });\n notifications.error(`Couldn't load more: ${err.message}`);\n }\n }\n}\n\nexport class RefreshAction extends Action {\n static deps = ['engine', 'explorer'];\n\n async execute(r) {\n return r.engine.dispatch(new NavigateAction(r.explorer.get().collectionId));\n }\n}\n\n/** Show what's been deleted but not destroyed, and act on it. */\nexport class TrashAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications'];\n\n constructor(op = 'list', id = null) {\n super();\n this.op = op;\n this.id = id;\n }\n async execute(r) {\n const { api, explorer, notifications } = r;\n const collection = explorer.get().collectionId;\n // Putting it away is one of the things you can do to the trash. Without this the\n // section, once opened, stayed on screen until a page reload — there was no way\n // back to a plain list of files.\n if (this.op === 'hide') {\n explorer.set({ trash: null });\n return;\n }\n try {\n if (this.op === 'restore') {\n const { node } = await api.restore(this.id);\n notifications.success(`Restored “${node.name}”`);\n } else if (this.op === 'purge') {\n await api.purgeTrash({ id: this.id });\n } else if (this.op === 'empty') {\n const { purged } = await api.purgeTrash({ collection });\n notifications.success(`Deleted ${purged} item${purged === 1 ? '' : 's'} for good`);\n }\n const { items } = await api.trash(collection);\n explorer.set({ trash: items });\n // Restoring puts something back in the drive, so the list on screen is now stale.\n if (this.op !== 'list') r.engine.dispatch(new NavigateAction(collection));\n } catch (err) {\n notifications.error(`Trash: ${err.message}`);\n }\n }\n}\n\nexport class DeleteAction extends Action {\n // `navigation`, not `workbench`: the panel stack and the recents list are both its, and a\n // deleted file must not survive in either.\n static deps = ['api', 'engine', 'navigation', 'notifications'];\n\n constructor(ids) {\n super();\n this.ids = ids;\n }\n async execute(r) {\n try {\n for (const id of this.ids) await r.api.remove(id);\n r.notifications.info(`Deleted ${this.ids.length} item${this.ids.length > 1 ? 's' : ''}`);\n for (const id of this.ids) r.navigation.forget(id);\n } catch (err) {\n r.notifications.error(`Couldn’t delete: ${err.message}`);\n }\n r.engine.dispatch(new RefreshAction());\n }\n}\n\nexport class RenameAction extends Action {\n // The renamed node has to reach the open panel too, or the title bar keeps the old name\n // until something else refreshes it. That stack belongs to `navigation`.\n static deps = ['api', 'engine', 'navigation', 'notifications'];\n\n constructor(id, newName) {\n super();\n this.id = id;\n this.newName = newName;\n }\n async execute(r) {\n try {\n const node = await r.api.rename(this.id, this.newName);\n r.navigation.updateTabNode(node.node);\n r.engine.dispatch(new RefreshAction());\n } catch (err) {\n r.notifications.error(`Couldn’t rename: ${err.message}`);\n }\n }\n}\n\n\nexport class OpenFileAction extends Action {\n static deps = ['context', 'contributions', 'engine', 'plugins', 'settings'];\n\n /** @param {object} node @param {{reset?:boolean}} [opts] reset → start a fresh stack (modal search) */\n constructor(node, opts = {}) {\n super();\n this.node = node;\n this.opts = opts;\n }\n async execute(r) {\n // Guard against being invoked with no target (e.g. a command fired with an empty\n // selection) — dereferencing a null node would throw an unhandled rejection.\n if (!this.node) return;\n const open = (openerId) => r.engine.dispatch(new OpenInPanelAction(this.node, openerId, { reset: !!this.opts.reset }));\n\n // An explicit opener (e.g. the switch-opener control) wins outright.\n if (this.opts.openerId) return open(this.opts.openerId);\n\n // Only openers available right now (a plugin previewer needing the network while\n // offline is skipped, so we fall back to a built-in one).\n const avail = availableOpeners(r, this.node);\n\n // A remembered choice for this file type, if that opener is still available.\n const remembered = rememberedOpenerId(r, this.node);\n if (remembered && avail.some((o) => o.id === remembered)) return open(remembered);\n\n // Several openers and no saved preference → let the user choose (with an option to\n // remember). One or none → just open the best (or the download fallback).\n if (avail.length > 1) {\n return r.engine.dispatch(new ShowDialogAction({ kind: 'opener-chooser', node: this.node, openers: avail, reset: !!this.opts.reset }));\n }\n open(avail[0]?.id || 'core.fallback');\n }\n}\n\nexport class UploadFilesAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'settings', 'transfers'];\n\n constructor(files, collectionId) {\n super();\n this.files = files;\n this.collectionId = collectionId;\n }\n async execute(r) {\n const collection = this.collectionId || r.explorer.get().collectionId;\n // Uploading with no collection open has nowhere to put the bytes. Refused visibly:\n // the old fallback sent them to whatever 'default' happened to be.\n if (!collection) {\n r.notifications.error('Open a collection before uploading');\n return;\n }\n const concurrency = r.settings.get('uploads.concurrency');\n const uploads = [...this.files].map((file) => this.#one(r, file, collection, concurrency));\n await Promise.allSettled(uploads);\n r.engine.dispatch(new NavigateAction(collection));\n }\n /**\n * One file, once — and again, on the same tray row, if the user asks.\n *\n * `existingTid` is what makes a manual retry a second attempt at the row already on\n * screen rather than a new entry beside it. The retry closes over the File, which is why\n * it can run at all without asking the user to find the file again; it is also why the\n * offer does not survive a reload, since nothing here is persisted.\n */\n async #one(r, file, collection, concurrency, existingTid = null) {\n const { api, notifications, transfers } = r;\n const tid = existingTid || newId('xfer');\n const controller = new AbortController();\n if (existingTid) {\n transfers.restart(tid, controller);\n } else {\n transfers.start(tid, file.name, file.size, controller, {\n retry: () => this.#one(r, file, collection, concurrency, tid),\n });\n }\n let uploadId = null;\n try {\n const node = await api.upload(file, {\n collection, concurrency, signal: controller.signal,\n onStart: (id) => { uploadId = id; },\n onProgress: (p) => transfers.progress(tid, p),\n });\n transfers.finish(tid, 'done');\n // The server disambiguates a same-name collision rather than overwriting — tell\n // the user when the saved name differs from what they dropped.\n if (node?.name && node.name !== file.name) {\n notifications.info(`\"${file.name}\" already existed — saved as \"${node.name}\".`);\n }\n } catch (err) {\n // Release the server-side session so a cancelled/failed multipart upload doesn't\n // leak an open multipart object (best-effort; the server also sweeps stale ones).\n if (uploadId) api.abortUpload(uploadId).catch(() => {});\n if (err.code === 'aborted') transfers.finish(tid, 'cancelled');\n else {\n transfers.finish(tid, 'error', err.message);\n // The toast says what happened; the tray row is where it can be acted on, and\n // pointing at it is the difference between a dead end and an offer.\n notifications.error(`Upload failed: ${file.name} — ${err.message}. Retry it from the transfers tray.`);\n }\n }\n }\n}\n\n/** Drive-wide tag/property filter (`#tag`, `#key:op:value`), optionally narrowed\n * by free text. Falls back to filtering the loaded folder when offline. */\nexport class FilterAction extends Action {\n static deps = ['api', 'explorer', 'offline', 'search'];\n\n constructor(filters, text) {\n super();\n this.filters = filters || [];\n this.text = text || '';\n }\n async execute(r) {\n const { api, search } = r;\n if (!this.filters.length) {\n search.set({ results: [], ran: false, filtered: false });\n return;\n }\n search.set({ query: this.text, loading: true, error: null, filtered: true });\n if (r.offline && !r.offline.get().online) {\n const items = (r.explorer.get().items || []).filter((n) => matchesTagFilters(n, this.filters));\n search.set({ results: items.map((node) => ({ node })), loading: false, ran: true, filtered: true, offline: true });\n return;\n }\n try {\n const res = await api.tagSearch(this.filters, this.text.trim() || undefined, { limit: 100 });\n search.set({ results: (res.items || []).map((node) => ({ node })), loading: false, ran: true, filtered: true, offline: false });\n } catch (err) {\n search.set({ loading: false, error: err.message, ran: true, filtered: true });\n }\n }\n}\n\n/** Command-palette quick-open: a keyword file search whose results live in the search\n * service (state.se.paletteFiles) instead of ad-hoc state hung off the UI. */\nexport class QuickOpenAction extends Action {\n static deps = ['api', 'overlay', 'search'];\n\n constructor(query) {\n super();\n this.query = query;\n }\n async execute(r) {\n const { api, overlay, search } = r;\n // The palette's mode as it is NOW, not as it was when the keystroke's timer was set.\n // This guard used to live in the debounce callback in the component, which had to read\n // it back off the service for exactly this reason — a listener belongs to the render\n // that created it, and the mode can change under a pending timer.\n if (overlay.get().palette?.mode !== 'files') return;\n const q = (this.query || '').trim();\n if (!q) { search.set({ paletteFiles: [], paletteQuery: '', paletteError: null, paletteLoading: false }); return; }\n // Keystrokes outrun the network: a slower request for an earlier query must not\n // land on top of a newer one's results. The query itself is the sequence token —\n // whatever the palette input holds now is the only answer worth showing.\n search.set({ paletteQuery: q, paletteLoading: true, paletteError: null });\n try {\n const res = await api.search(q, { mode: 'keyword', limit: 30 });\n if (search.get().paletteQuery !== q) return; // superseded\n search.set({ paletteFiles: res.results || [], paletteLoading: false });\n } catch (err) {\n if (search.get().paletteQuery !== q) return;\n // A failed search must not look like \"no files matched\" — that reads as a fact\n // about the drive when it's actually a fact about the request.\n search.set({ paletteFiles: [], paletteLoading: false, paletteError: err?.message || 'Search failed' });\n }\n }\n}\n\nexport class SearchAction extends Action {\n static deps = ['api', 'contributions', 'offline', 'search', 'settings'];\n\n constructor(query, mode) {\n super();\n this.query = query;\n this.mode = mode;\n }\n async execute(r) {\n const { api, contributions, search, settings } = r;\n const q = this.query.trim();\n if (!q) {\n search.set({ query: '', results: [], ran: false, error: null, resolved: null });\n return;\n }\n const mode = this.mode || settings.get('search.mode');\n search.set({ query: this.query, mode, loading: true, error: null, resolved: null, filtered: false });\n // The query itself is the sequence token, the same guard QuickOpenAction uses and for\n // the same reason: keystrokes outrun the network, and a slower request for an earlier\n // query must not land on top of a newer one's results. It matters most for the query\n // that was CLEARED — pressing Escape inside the debounce window used to let\n // `SearchAction('contract')` land after the clear, leaving \"Searching for contract\"\n // over the home list.\n const superseded = () => search.get().query !== this.query;\n const offline = r.offline;\n // Offline (or server unreachable) → search the pinned corpus locally.\n if (offline && !offline.get().online) {\n try {\n const results = await offline.searchOffline(q, { limit: 40 });\n if (superseded()) return;\n search.set({ results, loading: false, ran: true, offline: true, resolved: null });\n } catch (err) {\n if (superseded()) return;\n search.set({ results: [], loading: false, ran: true, offline: true, error: err.message });\n }\n return;\n }\n try {\n // The server transforms the raw query (parse/LLM) and tells us what it actually\n // searched — surfaced to the user via `resolved` so search is honest.\n //\n // We send the views we can draw with, because the transformer is the only thing in\n // the stack that read the sentence: \"photos from the trip last summer\" asks for a\n // gallery, and by the time the results are back all anyone can do is guess from\n // content types. It can only name a view from this list.\n const views = contributions.ofType('view').map((v) => ({ id: v.id, title: v.title || v.id }));\n const res = await api.query(q, { mode, limit: 40, views });\n if (superseded()) return;\n search.set({ results: res.results, resolved: res.resolved || null, loading: false, ran: true, offline: false });\n } catch (err) {\n if (superseded()) return;\n if (offline) {\n const results = await offline.searchOffline(q, { limit: 40 });\n if (superseded()) return;\n search.set({ results, loading: false, ran: true, offline: true, error: results.length ? null : err.message });\n } else {\n search.set({ loading: false, error: err.message, ran: true });\n }\n }\n }\n}\n\n// --- API keys (admin) ----------------------------------------------------------\n\n/**\n * Load the key list.\n *\n * Silent on REFUSAL rather than noisy: this fires when Settings opens, and a non-admin\n * opening Settings gets a 403 that is the correct answer, not an error worth a toast. That\n * is `loaded` with an empty list — the section simply is not part of their settings screen.\n *\n * Any other failure sets `error` and leaves `loaded` alone, because they are different\n * facts. Setting both meant one transient failure rendered the section blank with no\n * message and no way back: `loaded` was true so the \"not yet\" branch passed, and the empty\n * list was indistinguishable from a drive with no keys.\n */\nexport class LoadApiKeysAction extends Action {\n static deps = ['api', 'apiKeys'];\n\n async execute(r) {\n r.apiKeys.set({ loading: true, error: null });\n try {\n const res = await r.api.apiKeys();\n r.apiKeys.set({ keys: res.keys || [], loading: false, loaded: true, error: null });\n } catch (err) {\n if (err?.status === 403 || err?.code === 'forbidden') {\n r.apiKeys.set({ keys: [], loading: false, loaded: true, error: null, forbidden: true });\n return;\n }\n r.apiKeys.set({ loading: false, error: err?.message || 'Could not load API keys' });\n }\n }\n}\n\n/**\n * Mint a key and hold the secret for display.\n *\n * The secret is the whole point of the round trip and cannot be fetched again, so it is\n * put into state before anything else can fail. A refresh of the list afterwards is a\n * convenience; losing the secret because the refresh threw would not be.\n */\nexport class MintApiKeyAction extends Action {\n static deps = ['api', 'apiKeys', 'notifications'];\n\n constructor(spec) {\n super();\n this.spec = spec;\n }\n async execute(r) {\n r.apiKeys.set({ busy: 'mint', error: null });\n try {\n const { key, secret } = await r.api.mintApiKey(this.spec);\n r.apiKeys.set({ minted: { key, secret }, busy: null });\n const res = await r.api.apiKeys().catch(() => null);\n if (res) r.apiKeys.set({ keys: res.keys || [] });\n return key;\n } catch (err) {\n r.apiKeys.set({ busy: null, error: err?.message || 'Could not create the key' });\n r.notifications.error(err?.message || 'Could not create the key');\n return null;\n }\n }\n}\n\nexport class RevokeApiKeyAction extends Action {\n static deps = ['api', 'apiKeys', 'notifications'];\n\n constructor(id) {\n super();\n this.id = id;\n }\n async execute(r) {\n r.apiKeys.set({ busy: this.id, error: null });\n try {\n await r.api.revokeApiKey(this.id);\n const res = await r.api.apiKeys().catch(() => null);\n r.apiKeys.set({ busy: null, ...(res ? { keys: res.keys || [] } : {}) });\n r.notifications.success('Key revoked');\n } catch (err) {\n r.apiKeys.set({ busy: null });\n r.notifications.error(err?.message || 'Could not revoke the key');\n }\n }\n}\n\n\n/**\n * Rebind a keyboard shortcut, or clear it with `key: null`.\n *\n * Carries the binding ID rather than the binding, because a view emits descriptions and an\n * action carries an id — the component that dispatches this has never held the binding\n * object, only a row describing it.\n */\nexport class RebindKeyAction extends Action {\n static deps = ['keybindings'];\n constructor(bindingId, key) {\n super();\n this.bindingId = bindingId;\n this.key = key;\n }\n\n async execute({ keybindings: kb }) {\n // `rebind` resolves a binding object or a command id, not a binding id, so look the\n // row back up. Resolving here rather than widening the service keeps the id the only\n // thing that crosses the boundary.\n const binding = kb.resolved().find((b) => b.bindingId === this.bindingId);\n if (!binding) return;\n kb.rebind(binding, this.key);\n }\n}\n\n/**\n * Copy text to the clipboard, and say so.\n *\n * Four components had their own version of this, each written slightly differently — two\n * with `.then/.catch`, one with `await` in a `try`, one optional-chaining the clipboard and\n * one not. All four ended the same way, and the ending is the part that matters: a copy that\n * FAILS must still put the text where it can be selected by hand, or the user is left with a\n * button that did nothing and no way to get at what it was for. That is what the sticky\n * fallback is, and it is exactly the sort of detail that rots when it lives in four places.\n *\n * Clipboard access is denied outside a user gesture and in an insecure context, so the\n * failure path is ordinary rather than exceptional.\n */\nexport class CopyTextAction extends Action {\n static deps = ['notifications'];\n /**\n * @param {string} text\n * @param {string} [label] what the toast says on success\n */\n constructor(text, label = 'Copied') {\n super();\n this.text = text;\n this.label = label;\n }\n\n async execute({ notifications: notes }) {\n try {\n await navigator.clipboard.writeText(this.text);\n notes.success(this.label);\n } catch {\n notes.info(this.text, { sticky: true });\n }\n }\n}\n\n/** Dismiss one notification, by id. */\nexport class DismissNotificationAction extends Action {\n static deps = ['notifications'];\n constructor(id) {\n super();\n this.id = id;\n }\n\n async execute({ notifications }) {\n notifications.dismiss(this.id);\n }\n}\n\n// --- the shell's own surface ----------------------------------------------------\n//\n// Opening and closing the workbench's overlays. These were direct calls on\n// `platform.workbench`, which meant the engine could not see a person close a dialog or\n// move through the palette — the same hole `ExecCommandAction` closed for commands.\n//\n// One class per operation rather than a single ShellAction carrying a method name. The\n// point of routing these through the engine is that the feed says what happened; a\n// discriminated blob would make every one of them read as \"ShellAction\" and give back\n// exactly the observability this is for.\n//\n// `showDialog` and `showContextMenu` are here too, and the reason they arrived last is the\n// reason they are worth having: both used to take callbacks — a dialog carried `onConfirm`,\n// a menu carried an item's `run` — so converting them mechanically would have posted a\n// closure through the engine and called it an action. Every outcome is an ACTION TO\n// DISPATCH now, which is why nothing in a dialog spec or a menu item is callable.\n\nclass ShellAction extends Action {\n static deps = ['workbench'];\n async execute({ workbench }) {\n this.apply(workbench);\n }\n}\n\n/**\n * The overlays: palette, dialog, context menu, plugin panel.\n *\n * Their own lease. Closing a dialog used to go through the workbench facade and therefore\n * leased the entire shell — the panel stack, the launcher cursor and the sheet included —\n * to set one field to null.\n */\nclass OverlayAction extends Action {\n static deps = ['overlay'];\n async execute({ overlay }) {\n this.apply(overlay);\n }\n}\n\n/** The panel stack. Still a service: it mirrors into browser history and persists recents. */\nclass NavAction extends Action {\n static deps = ['navigation'];\n async execute({ navigation }) {\n this.apply(navigation);\n }\n}\n\nexport class CloseDialogAction extends OverlayAction {\n apply(o) { o.set({ dialog: null }); }\n}\n\n/** Merge a patch into the open dialog — a reactive dialog, like the opener chooser. */\nexport class UpdateDialogAction extends OverlayAction {\n constructor(patch) { super(); this.patch = patch; }\n apply(o) {\n const dialog = o.get().dialog;\n if (dialog) o.set({ dialog: { ...dialog, ...this.patch } });\n }\n}\n\nexport class CloseContextMenuAction extends OverlayAction {\n apply(o) { o.set({ contextMenu: null }); }\n}\n\nexport class ClosePaletteAction extends OverlayAction {\n apply(o) { o.set({ palette: null }); }\n}\n\nexport class SetPaletteQueryAction extends OverlayAction {\n constructor(query) { super(); this.query = query; }\n apply(o) {\n const palette = o.get().palette;\n // Back to the top: the previous highlight belonged to the previous result set.\n if (palette) o.set({ palette: { ...palette, query: this.query, index: 0 } });\n }\n}\n\nexport class SetPaletteIndexAction extends OverlayAction {\n constructor(index) { super(); this.index = index; }\n apply(o) {\n const palette = o.get().palette;\n if (palette) o.set({ palette: { ...palette, index: this.index } });\n }\n}\n\n/**\n * Move the palette's highlight, wrapping at either end.\n *\n * The wrapping is HERE now. It used to be in the service with this action forwarding two\n * arguments to it — and it forwarded one, so the service could not tell where the end was,\n * returned early, and the arrow keys did nothing at all. Deciding and writing in one place\n * is what removes the chance.\n */\nexport class MovePaletteAction extends OverlayAction {\n constructor(delta, count) { super(); this.delta = delta; this.count = count; }\n apply(o) {\n const palette = o.get().palette;\n if (!palette || !this.count) return;\n o.set({ palette: { ...palette, index: wrapIndex(palette.index, this.delta, this.count) } });\n }\n}\n\n/** The double-shift overlay: a search that starts empty and resets the stack on a pick. */\nexport class OpenSearchModalAction extends ShellAction {\n apply(wb) { wb.set({ searchModal: true, launch: { query: '', index: 0 } }); }\n}\n\nexport class CloseSearchModalAction extends ShellAction {\n apply(wb) { wb.set({ searchModal: false }); }\n}\n\n/** Open (or close) one collection's access list on the administration screen. */\nexport class ShowCollectionAccessAction extends ShellAction {\n constructor(collectionId) { super(); this.collectionId = collectionId; }\n apply(wb) { wb.set({ aclFor: wb.get().aclFor === this.collectionId ? null : this.collectionId }); }\n}\n\nexport class SetLaunchQueryAction extends ShellAction {\n constructor(query) { super(); this.query = query; }\n // Back to the top, for the same reason the palette does: the old highlight belonged to\n // the old results.\n apply(wb) { wb.set({ launch: { query: this.query, index: 0 } }); }\n}\n\nexport class SetLaunchIndexAction extends ShellAction {\n constructor(index) { super(); this.index = index; }\n apply(wb) { wb.set({ launch: { ...wb.get().launch, index: this.index } }); }\n}\n\n/** Raise, swap, or drop the phone bottom sheet. Tapping the open one closes it. */\nexport class OpenSheetAction extends ShellAction {\n constructor(which) { super(); this.which = which; }\n apply(wb) { wb.set({ sheet: wb.get().sheet === this.which ? null : this.which }); }\n}\n\nexport class CloseSheetAction extends ShellAction {\n apply(wb) { wb.set({ sheet: null }); }\n}\n\nexport class ToggleInfoPanelAction extends ShellAction {\n constructor(open) { super(); this.open = open; }\n apply(wb) { wb.set({ infoPanel: this.open ?? !wb.get().infoPanel }); }\n}\n\nexport class OpenPluginPanelAction extends OverlayAction {\n constructor(pluginId) { super(); this.pluginId = pluginId; }\n apply(o) { o.set({ pluginPanel: this.pluginId }); }\n}\n\nexport class ClosePluginPanelAction extends OverlayAction {\n apply(o) { o.set({ pluginPanel: null }); }\n}\n\n/**\n * Open a node in a panel, with a chosen opener.\n *\n * Three things at once, and they belong together: the panel goes on the stack, the shell\n * switches to the drive, and the modal search — if that is where the pick came from —\n * closes behind it. The workbench service used to do the coordinating because the stack\n * lives in one place and the activity in another; an action is a better home for \"these\n * happen together\" than a facade over both.\n */\nexport class OpenInPanelAction extends Action {\n static deps = ['navigation', 'workbench'];\n constructor(node, openerId, opts = {}) {\n super();\n this.node = node;\n this.openerId = openerId;\n this.opts = opts;\n }\n async execute({ navigation, workbench }) {\n workbench.set({ activity: 'home', searchModal: false });\n navigation.openFile(this.node, this.openerId, this.opts);\n }\n}\n\n// --- the drive's services --------------------------------------------------------\n//\n// Cancelling a transfer, retrying an issue, tagging a file. These were direct method calls\n// on the service, so the engine saw an upload being cancelled only as the state change that\n// followed, with nothing to say a person had asked for it.\n//\n// Named per operation for the same reason the shell actions are: the feed is the point.\n\nclass ActivityAction extends Action {\n static deps = ['activity'];\n async execute(r) { this.apply(r.activity); }\n}\n/**\n * Show or hide the activity panel.\n *\n * The FLAG is overlay state like every other transient surface; the REFRESH is the\n * poller's. Opening has to refresh because polling backs off to 60s when nothing is\n * running, so a panel opened on an idle drive would otherwise show a list up to a minute\n * stale — which is exactly the moment someone is looking to find out what just happened.\n */\nexport class ToggleActivityPanelAction extends Action {\n static deps = ['activity', 'overlay'];\n constructor(which) { super(); this.which = which; }\n async execute({ activity, overlay }) {\n const open = this.which ?? !overlay.get().activityPanel;\n overlay.set({ activityPanel: open });\n if (open) await activity.refresh();\n }\n}\nexport class CancelTaskAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.cancel(this.id); }\n}\nexport class DismissTaskAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.dismiss(this.id); }\n}\nexport class RetryIssueAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.retryIssue(this.id); }\n}\nexport class DismissIssueAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.dismissIssue(this.id); }\n}\n\nclass TransfersAction extends Action {\n static deps = ['transfers'];\n async execute(r) { this.apply(r.transfers); }\n}\nexport class CancelTransferAction extends TransfersAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.cancel(this.id); }\n}\nexport class RetryTransferAction extends TransfersAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.retry(this.id); }\n}\nexport class DismissTransferAction extends TransfersAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.dismiss(this.id); }\n}\nexport class ClearFinishedTransfersAction extends TransfersAction {\n apply(s) { s.clearDone(); }\n}\n\nclass SocialAction extends Action {\n static deps = ['social'];\n // Awaited: several of these are network calls, and a dispatch feed that settles before\n // the work does reports success for something still in flight.\n async execute(r) { return this.apply(r.social); }\n}\nexport class ToggleInboxAction extends SocialAction {\n constructor(open) { super(); this.open = open; }\n apply(s) { s.toggleInbox(this.open); }\n}\n\n/** Ask the browser for push permission and register. */\nexport class EnablePushAction extends SocialAction {\n apply(s) { return s.enablePush(); }\n}\n\n/** Post a comment on the open item. */\nexport class PostCommentAction extends SocialAction {\n constructor(body) { super(); this.body = body; }\n apply(s) { return s.comment(this.body); }\n}\n\nexport class DeleteCommentAction extends SocialAction {\n constructor(commentId) { super(); this.commentId = commentId; }\n apply(s) { return s.deleteComment(this.commentId); }\n}\n\nexport class ReactToCommentAction extends SocialAction {\n constructor(commentId, emoji) { super(); this.commentId = commentId; this.emoji = emoji; }\n apply(s) { return s.react(this.commentId, this.emoji); }\n}\n\n/** Aim the comment box at a comment, or clear it with `null`. */\nexport class SetReplyToAction extends SocialAction {\n constructor(target) { super(); this.target = target; }\n apply(s) { s.setReplyTo(this.target); }\n}\nexport class AddTagAction extends SocialAction {\n constructor(name, value) { super(); this.name = name; this.value = value; }\n apply(s) { s.addTag(this.name, this.value); }\n}\nexport class RemoveTagAction extends SocialAction {\n constructor(name) { super(); this.name = name; }\n apply(s) { s.removeTag(this.name); }\n}\nexport class LoadSidecarAction extends SocialAction {\n constructor(nodeId) { super(); this.nodeId = nodeId; }\n apply(s) { s.loadSidecar(this.nodeId); }\n}\n\nclass ApiKeysAction extends Action {\n static deps = ['apiKeys'];\n async execute(r) { this.apply(r.apiKeys); }\n}\n\n/** Change one field of the mint form. Does nothing when there is no form open. */\nexport class PatchApiKeyDraftAction extends ApiKeysAction {\n constructor(patch) { super(); this.patch = patch; }\n apply(s) {\n const draft = s.get().draft;\n if (draft) s.set({ draft: { ...draft, ...this.patch } });\n }\n}\n\n/**\n * Toggle one capability on one collection in the draft.\n *\n * Per COLLECTION and capability: a key is scoped, so a capability without the collection\n * it applies to is meaningless. This used to be arithmetic inside the service with an\n * action in front of it forwarding two arguments — and it forwarded one, so the collection\n * id arrived as the capability and the server refused every mint. Deciding and writing are\n * one step now, with nothing in between to drop.\n *\n * `admin` is not treated specially. It is offered as itself and the server expands it;\n * pre-ticking read/write/delete alongside it would suggest they are separable afterwards,\n * and they are not.\n */\nexport class ToggleApiKeyCapAction extends ApiKeysAction {\n constructor(collectionId, capability) { super(); this.collectionId = collectionId; this.capability = capability; }\n apply(s) {\n const draft = s.get().draft;\n if (!draft) return;\n const caps = { ...draft.caps };\n const held = new Set(caps[this.collectionId] || []);\n if (held.has(this.capability)) held.delete(this.capability);\n else held.add(this.capability);\n if (held.size) caps[this.collectionId] = [...held];\n else delete caps[this.collectionId];\n s.set({ draft: { ...draft, caps } });\n }\n}\n\n/**\n * Move the launcher's highlight and sync the selection to whatever it landed on.\n *\n * ONE action because the two halves are not separable. Moving computes a new index — with\n * wrapping, so it is not `index + delta` — and the selection has to follow the row that\n * index now names. Written as two steps in the component it read the index back out of the\n * store immediately after writing it, which only worked because a direct method call is\n * synchronous. Dispatching is not: the highlight would move and the selection would sync to\n * the previously highlighted row, one keystroke behind, forever, without anything throwing.\n *\n * Here the read-back is inside the action, where it IS sequenced. `nodes` is the results in\n * display order — the component knows the running order, the store only knows the index.\n */\nexport class MoveLaunchAction extends Action {\n static deps = ['explorer', 'workbench'];\n constructor(delta, nodes) { super(); this.delta = delta; this.nodes = nodes; }\n async execute({ workbench, explorer }) {\n const count = this.nodes.length;\n if (!count) return;\n const index = wrapIndex(workbench.get().launch.index, this.delta, count);\n workbench.set({ launch: { ...workbench.get().launch, index } });\n selectNode(explorer, this.nodes[index]);\n }\n}\n\n/** Highlight a launcher row by position and select it — the pointer/Enter counterpart. */\nexport class SelectLaunchAction extends Action {\n static deps = ['explorer', 'workbench'];\n constructor(index, node) { super(); this.index = index; this.node = node; }\n async execute({ workbench, explorer }) {\n workbench.set({ launch: { ...workbench.get().launch, index: this.index } });\n selectNode(explorer, this.node);\n }\n}\n\n/**\n * Select exactly one node, or nothing.\n *\n * `selectionNodes` carries the NODE and not just the id, because the selection often cannot\n * be resolved from the loaded page: the launcher's rows come from search, which is scoped\n * across collections, so the node has to travel with the id or `selectedNodesOf` finds\n * nothing and rename/trash/copy-link return quietly while `hasSelection` disagrees.\n *\n * Selecting what is already selected must not emit. The launcher syncs the highlighted row\n * into here on every mouseenter, and a state push per mouse move would re-render the list\n * under the pointer. The rule lives with the mutation rather than inside the resource, so\n * the resource only holds and only `set` writes.\n */\nfunction selectNode(explorer, node) {\n const ids = node?.id ? [node.id] : [];\n const current = explorer.get().selection;\n if (ids.length === current.length && ids.every((id, i) => id === current[i])) return;\n explorer.set({ selection: ids, selectionNodes: node ? [node] : null });\n}\n\n/**\n * Write one slice of view state — a draft, a capture, a set of ticked boxes.\n *\n * Components used to call the store directly, and two of them did it DURING their own\n * render to install a default. The default is derived now (see `draftFor`), so this only\n * ever runs because a person did something.\n */\nexport class SetViewStateAction extends Action {\n static deps = ['viewState'];\n constructor(key, value) { super(); this.key = key; this.value = value; }\n async execute({ viewState }) { viewState.set({ [this.key]: this.value }); }\n}\n\n\n/**\n * Show a context menu at a point.\n *\n * Only possible now that items carry `actions` rather than `run` closures — this used to be\n * a direct call precisely because dispatching a menu would have meant putting functions on\n * the feed. See ui/activate.js.\n */\nexport class ShowContextMenuAction extends OverlayAction {\n /**\n * @param {Array} items\n * @param {{x?: number, y?: number, rect?: DOMRect, prefer?: 'up'|'down'}|null} [at]\n * A POINT (a right-click) or a rect to hang off (a button), not a resolved position.\n * Callers used to resolve it themselves — `r.top - 8 - items.length * 34`, a row height\n * hardcoded in two files that had to agree with the CSS and did not have to agree with\n * the overlay's clamp, which compensated by a different amount. Only the overlay can\n * measure, so only the overlay decides. Omit `at` for a keyboard-invoked menu.\n */\n constructor(items, at = null) {\n super();\n this.items = items;\n // Flattened to plain numbers: a DOMRect is a live object with methods, and this lands\n // in engine state, where nothing is callable.\n this.at = at?.rect\n ? { prefer: at.prefer || 'down', rect: { left: at.rect.left, top: at.rect.top, right: at.rect.right, bottom: at.rect.bottom } }\n : (at ? { x: at.x, y: at.y } : null);\n }\n\n apply(o) { o.set({ contextMenu: { items: this.items, at: this.at } }); }\n}\n\n/**\n * Show a dialog.\n *\n * The spec is data. A confirm carries `confirmActions`; so does a prompt, whose actions read\n * what was typed out of view state rather than being handed it — see PromptAction. Nothing\n * in a dialog spec is callable, which matters because the spec lives in workbench state.\n */\nexport class ShowDialogAction extends OverlayAction {\n constructor(dialog) { super(); this.dialog = dialog; }\n apply(o) { o.set({ dialog: this.dialog }); }\n}\n\n/** Change one setting. */\nexport class SetSettingAction extends Action {\n static deps = ['settings'];\n constructor(key, value) { super(); this.key = key; this.value = value; }\n async execute({ settings }) { settings.set(this.key, this.value); }\n}\n\n/**\n * Remember which opener a file type should use, or forget it with a null openerId.\n *\n * Not `SetSettingAction` with a pre-merged map, because building that map means reading the\n * current one — and a component that reads settings to compute what to write is the same\n * stale-base race as the drafts had (see PatchDraftAction). The merge happens here, against\n * what is stored.\n */\nexport class RememberOpenerAction extends Action {\n static deps = ['settings'];\n constructor(typeKey, openerId) { super(); this.typeKey = typeKey; this.openerId = openerId; }\n async execute({ settings }) {\n if (!this.typeKey) return;\n settings.set(ASSOC_KEY, withAssociation(settings.get(ASSOC_KEY), this.typeKey, this.openerId));\n }\n}\n\n/** Back through the panel stack. */\nexport class NavigateBackAction extends NavAction {\n apply(nav) { nav.back(); }\n}\n\n/** Close the viewer stack and return to the drive. */\nexport class ShowHomeAction extends Action {\n static deps = ['navigation', 'workbench'];\n async execute({ navigation, workbench }) {\n workbench.set({ activity: 'home', searchModal: false });\n navigation.reset();\n }\n}\n\n/** Reload one plugin — re-read its manifest and restart its worker. */\nexport class RefreshPluginAction extends Action {\n static deps = ['plugins'];\n constructor(pluginId) { super(); this.pluginId = pluginId; }\n async execute({ plugins }) { return plugins.refresh(this.pluginId); }\n}\n\n/**\n * Store a plugin secret.\n *\n * Not a setting: secrets go somewhere settings do not, which is why this is its own action\n * rather than SetSettingAction with a different key.\n */\nexport class SetPluginSecretAction extends Action {\n static deps = ['plugins'];\n constructor(pluginId, key, value) { super(); this.pluginId = pluginId; this.key = key; this.value = value; }\n async execute({ plugins }) { return plugins.setSecret(this.pluginId, this.key, this.value); }\n}\n\n/**\n * Open whatever a notification points at.\n *\n * The stat, the open, the panel and the failure message are one action because they are one\n * intent. Spread across a component they were a `.then` chain that had to know the API\n * answers `{ node }` rather than a node, and had to remember that a notification can\n * outlive its target — the item may be deleted, or live somewhere the reader has since\n * lost access to. Either way the click must say so rather than do nothing.\n */\nexport class OpenNotificationTargetAction extends Action {\n // Five of these used to exist only to feed a hand-call of `OpenFileAction.execute(r)` —\n // the one `.execute(` in the package — and one of them, `explorer`, fed nothing at all.\n // The coupling was invisible: a dep added to OpenFileAction broke THIS action at runtime\n // with an `undefined`, the same failure mode as the missing `overlay` above. Dispatching\n // instead also puts the open on the feed, which it never was: opening from a notification\n // and opening from a row click are the same intent and the engine should see both.\n static deps = ['api', 'engine', 'notifications', 'workbench'];\n\n constructor(nodeId) { super(); this.nodeId = nodeId; }\n\n async execute({ api, engine, notifications, workbench }) {\n let node;\n try {\n ({ node } = await api.stat(this.nodeId));\n } catch (err) {\n notifications.warn(err?.status === 403 || err?.code === 'forbidden'\n ? 'You no longer have access to that item.'\n : 'That item no longer exists.');\n return;\n }\n // `.next([...])`, because `dispatch` returns a feed and the panel must open AFTER the\n // file does — see platform/commands.js, which names this trap.\n await runAction(engine, new OpenFileAction(node));\n workbench.set({ infoPanel: true });\n }\n}\n\n/**\n * The base for anything a prompt dialog submits.\n *\n * The typed value is engine state (see viewState.js), so the action READS it rather than\n * being handed it by a callback. Subclasses implement `withValue`; the dialog closes first,\n * because every one of these used to do that by hand and two forgot to do it consistently.\n */\nexport class PromptAction extends Action {\n static deps = ['overlay', 'viewState'];\n\n async execute(r) {\n const held = r.viewState.get()[PROMPT];\n const value = (held?.value ?? '').trim();\n r.overlay.set({ dialog: null });\n if (value) await this.withValue(value, r);\n }\n}\n\n/** Rename the node this prompt was opened for. */\nexport class RenamePromptAction extends PromptAction {\n static deps = ['engine', 'overlay', 'viewState'];\n constructor(node) { super(); this.node = node; }\n async withValue(name, { engine }) {\n if (name !== this.node.name) engine.dispatch(new RenameAction(this.node.id, name));\n }\n}\n\n/**\n * Install the package the review dialog is about, with the capabilities that were ticked.\n *\n * The dialog used to carry an `onInstall` closure that did all of this, which put an effect\n * inside engine state — and ran it after the dispatching action's lease had been released,\n * with nothing of it on the feed. Two docblocks assert that a dialog spec holds no\n * functions; this is what makes that true.\n *\n * `pkg` and `trust` ride on the instance because they are what the review WAS; the grants\n * are read from viewState, because they are what the user did to it while it was open.\n */\nexport class InstallReviewedPluginAction extends Action {\n static deps = ['notifications', 'overlay', 'plugins', 'viewState', 'workbench'];\n\n constructor(pkg, trust, label) { super(); this.pkg = pkg; this.trust = trust; this.label = label; }\n\n async execute({ notifications, overlay, plugins, viewState, workbench }) {\n const grants = [...(viewState.get()[PLUGIN_REVIEW]?.grants || [])];\n overlay.set({ dialog: null });\n // Account installs upload the package and run a handshake that can take a while —\n // switch to the plugins view (which shows the plugin's loading state) and hold a sticky\n // \"Installing…\" toast so the user isn't left staring at nothing.\n workbench.set({ activity: 'plugins', sidebarVisible: true });\n const pending = notifications.info(`Installing “${this.label}”…`, { sticky: true });\n try {\n await plugins.install(this.pkg, { grants, trust: this.trust });\n notifications.dismiss(pending);\n notifications.success(`Installed “${this.label}”`);\n } catch (err) {\n notifications.dismiss(pending);\n notifications.error(`Install failed: ${err.message}`);\n }\n }\n}\n\n/** Fetch and review a plugin package from the URL that was typed. */\nexport class InstallPluginFromUrlPromptAction extends PromptAction {\n static deps = ['notifications', 'overlay', 'plugins', 'social', 'viewState', 'workbench'];\n async withValue(url, r) { await beginInstallFromUrl(r, url); }\n}\n\n/**\n * Create the collection the dialog's form describes.\n *\n * The form is already engine state — the dialog puts it in viewState as it is typed — so\n * this reads it rather than being handed a record through a callback. The form-to-record\n * shaping stays in the dialog, which is the thing that knows which fields the chosen\n * driver declared.\n */\nexport class CreateCollectionFromFormAction extends Action {\n static deps = ['engine', 'overlay'];\n constructor(record) { super(); this.record = record; }\n async execute({ engine, overlay }) {\n overlay.set({ dialog: null });\n if (this.record) engine.dispatch(new CreateCollectionAction(this.record));\n }\n}\n\n/**\n * Change one field of a draft, merging against what is stored RATHER than against what the\n * render saw.\n *\n * Every field handler used to build `{ ...form, [k]: value }` from the `form` its own render\n * closed over. Two changes to different fields before the next render therefore both merged\n * onto the same stale base, and the second silently dropped the first — type a name, switch\n * the storage driver in the same frame, and the name is gone with the Create button quietly\n * disabled. Renders are coalesced by rAF, so \"in the same frame\" is not rare, and a\n * backgrounded tab makes it certain.\n *\n * Reading current state inside the action removes the window entirely.\n *\n * @param {string} key which draft\n * @param {object} ref the dialog instance it belongs to\n * @param {object} patch the field(s) being changed\n * @param {object} fallback the draft's default, for when the held one is another dialog's\n */\nexport class PatchDraftAction extends Action {\n static deps = ['viewState'];\n\n constructor(key, ref, patch, fallback = {}) {\n super();\n this.key = key;\n this.ref = ref;\n this.patch = patch;\n this.fallback = fallback;\n }\n\n async execute({ viewState }) {\n const held = viewState.get()[this.key];\n const base = held && held.ref === this.ref ? held.form : this.fallback;\n viewState.set({ [this.key]: { ref: this.ref, form: { ...base, ...this.patch } } });\n }\n}\n\n// --- what commands used to do inline ---------------------------------------------\n//\n// bl/commands.js registered 40 commands and 36 of them were CLOSURES over `app` — the whole\n// world — doing effects outside the engine. That mattered more than the line count suggests,\n// because commands are the entry point for everything a person actually does: the palette,\n// every keybinding, every menu item, every row button. `ExecCommandAction` routed the intent\n// in and the handler walked straight back out, so the engine saw a command being run and\n// then nothing of what it did.\n//\n// A command is a DESCRIPTION now — `{ id, title, actions(...args) }`, where `actions` is a\n// pure factory. Everything below is where those handler bodies went.\n\n/**\n * The file a command acts on: the one it was handed, else the selection, else what is open.\n *\n * Three commands resolved this identically and a fourth got it slightly wrong. \"Nothing is\n * selected\" is a real answer and has to be said out loud — returning silently is\n * indistinguishable from a broken command.\n */\nfunction subjectOf({ explorer, navigation, notifications }, node = null) {\n const found = node || selectedNodesOf(explorer.get())[0] || navigation.activeTab()?.node;\n if (!found) notifications.info('Pick a file first — highlight one in the list, or open it.');\n return found;\n}\n\n/** Open the command palette, or quick-open, depending on the mode. */\nexport class OpenPaletteAction extends OverlayAction {\n constructor(mode = 'commands', query = '') { super(); this.mode = mode; this.query = query; }\n apply(o) { o.set({ palette: { mode: this.mode, query: this.query, index: 0 } }); }\n}\n\n/** Switch the main area between the drive, plugins and settings. */\nexport class SetActivityAction extends ShellAction {\n constructor(activity) { super(); this.activity = activity; }\n apply(wb) { wb.set({ activity: this.activity, sidebarVisible: true }); }\n}\n\n/**\n * Close the topmost transient thing — what Escape does.\n *\n * The ORDER is the whole content of this action, and it spans four resources: the menu\n * over the dialog, the dialog over the phone sheet, the sheet over the modal search, and\n * only when none of those is up does Escape start popping the panel stack. Getting it wrong\n * is not a crash — it is Escape closing the wrong thing, which is why it is written out\n * once, here, rather than distributed over whoever owns each overlay.\n */\nexport class CloseOverlaysAction extends Action {\n static deps = ['navigation', 'overlay', 'workbench'];\n async execute({ navigation, overlay, workbench }) {\n const o = overlay.get();\n const wb = workbench.get();\n if (o.contextMenu) return overlay.set({ contextMenu: null });\n if (o.dialog) return overlay.set({ dialog: null });\n if (wb.sheet) return workbench.set({ sheet: null });\n if (wb.searchModal) return workbench.set({ searchModal: false });\n if (o.palette) return overlay.set({ palette: null });\n if (o.pluginPanel) return overlay.set({ pluginPanel: null });\n // The activity panel floats over the page and carries a close button like everything\n // else in this ladder, and was the one such surface Escape did not reach. Below the\n // plugin panel deliberately: it opens BY ITSELF when a storage check finishes, and\n // Escape should not close what you opened on purpose in order to dismiss what\n // appeared on its own.\n if (o.activityPanel) return overlay.set({ activityPanel: false });\n // Nothing floating: Escape pops the top viewer panel instead.\n if (navigation.get().stack.length > 1) navigation.back();\n }\n}\n\n/**\n * Speak to search.\n *\n * On a TV this is mostly NOT about recognising anything: a remote's mic dictates into\n * whatever text field the platform keyboard is attached to, and is swallowed by the system\n * assistant when there isn't one. So the first job is to put the search field on screen and\n * focused, which is a feature on every TV whether or not the browser can transcribe. Where\n * it can — on-device only, see platform/voice.js — it also starts listening and types what\n * it hears.\n */\nexport class VoiceSearchAction extends Action {\n static deps = ['engine', 'voice'];\n async execute({ engine, voice }) {\n await voice.run({\n onText: (text, { final }) => {\n if (!text) return;\n engine.dispatch(new SetLaunchQueryAction(text));\n // Interim results keep the box in step with the speaker; only the settled\n // transcript is worth a round trip to the server.\n if (final) engine.dispatch(new SearchAction(text));\n },\n });\n }\n}\n\n/** Reindex the whole drive. Reports as a task rather than blocking — it takes minutes. */\nexport class RebuildIndexAction extends Action {\n static deps = ['activity', 'api', 'engine', 'notifications'];\n async execute({ activity, api, engine, notifications }) {\n try {\n const res = await api.reindex();\n await activity.refreshTasks();\n // \"…and show the user\" belongs to the action that decided to do the work, not to\n // the service that holds the list. Three network verbs used to open the panel as a\n // side effect of a fetch, from inside a resource.\n engine.dispatch(new ToggleActivityPanelAction(true));\n if (res.alreadyRunning) notifications.info('A rebuild is already running');\n } catch (err) {\n notifications.error(`Couldn't rebuild the index: ${err.message}`);\n }\n }\n}\n\n/**\n * Pick up files added, replaced or removed in the bucket by something other than Trove.\n *\n * No collection means no scan. This used to fall back to one called 'default', which on a\n * drive that has none scanned a collection that does not exist and reported the failure as\n * a scan error.\n */\nexport class ScanCollectionAction extends Action {\n static deps = ['activity', 'api', 'engine', 'explorer', 'notifications'];\n async execute({ activity, api, engine, explorer, notifications }) {\n const id = explorer.get().collectionId;\n if (!id) return notifications.info('Open a collection first — a scan is per collection.');\n try {\n const res = await api.scanCollection(id);\n await activity.refreshTasks();\n engine.dispatch(new ToggleActivityPanelAction(true));\n if (res.alreadyRunning) notifications.info('A scan of this collection is already running');\n activity.followUp();\n } catch (err) {\n notifications.error(`Couldn't scan “${id}”: ${err.message}`);\n }\n }\n}\n\n/**\n * Whether the backing stores are reachable from a browser at all.\n *\n * Separate from a scan: a scan asks what the store HOLDS, this asks whether it can be READ\n * from here — the failure that makes every file open to a spinner.\n */\nexport class CheckStorageAction extends Action {\n static deps = ['activity', 'api', 'engine', 'notifications'];\n async execute({ activity, api, engine, notifications }) {\n try {\n const res = await api.checkStorage();\n await activity.refresh();\n engine.dispatch(new ToggleActivityPanelAction(true));\n const problems = (res.results || []).reduce((n, r) => n + (r.findings?.length || 0), 0);\n if (problems) {\n notifications.warn(`Found ${problems} storage problem${problems === 1 ? '' : 's'} — see Activity`);\n } else if (!res.checked) {\n notifications.info('There are no collections to check yet');\n } else if (!res.corsChecked) {\n // Honest about what was not checked. Reporting \"all good\" having skipped the check\n // that matters is how a diagnostic stops being believed.\n notifications.info('Stores are reachable. Browser access was not checked — this drive has no public URL configured.');\n } else {\n notifications.success('Stores are reachable and allow browser access');\n }\n } catch (err) {\n notifications.error(`Couldn't check the stores: ${err.message}`);\n }\n }\n}\n\n/** Ask for files, then upload them into the open collection. */\nexport class PickAndUploadAction extends Action {\n static deps = ['engine', 'explorer'];\n async execute({ engine, explorer }) {\n const collection = explorer.get().collectionId;\n // Awaited, so the feed's `complete` means the upload started rather than the dialog\n // opened — and so the leases below it are still held when the upload uses them.\n const files = await pickFiles();\n if (files?.length) await runAction(engine, new UploadFilesAction(files, collection));\n }\n}\n\n/**\n * Copy a link to the subject, in one of its two spellings.\n *\n * `trove:` is what one document writes to link another; it means nothing to a browser. A\n * share link is a URL you can paste into a message. Both end at CopyTextAction, which is\n * the thing that knows a failed copy must still leave the text somewhere selectable.\n */\nexport class CopyLinkAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications'];\n /** @param {'trove'|'share'} kind */\n constructor(kind = 'trove', node = null) { super(); this.kind = kind; this.node = node; }\n async execute(r) {\n const node = subjectOf(r, this.node);\n if (!node) return;\n return r.engine.dispatch(this.kind === 'share'\n ? new CopyTextAction(shareUrl(node, location.origin),\n 'Link copied — anyone with access to this collection can open it')\n : new CopyTextAction(troveUri(node), `Copied ${troveUri(node)}`));\n }\n}\n\n/** Ask for a new name for the subject. The prompt's value is read by RenamePromptAction. */\nexport class RenameSubjectAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications'];\n constructor(node = null) { super(); this.node = node; }\n async execute(r) {\n const node = subjectOf(r, this.node);\n if (!node) return;\n r.engine.dispatch(new ShowDialogAction({\n kind: 'prompt', title: 'Rename', label: 'New name', value: node.name, confirmLabel: 'Rename',\n confirmActions: [new RenamePromptAction(node)],\n }));\n }\n}\n\n/**\n * Move the selection to the trash, confirming first unless that was turned off.\n *\n * Deleting the file you have OPEN is the obvious intent when nothing is selected, so it\n * counts as the subject. The confirmation says what actually happens: telling someone a\n * file will be \"permanently deleted\" when it goes to the trash trains them to fear a safe\n * action, and the reverse — promising recovery that doesn't exist — is worse.\n */\nexport class DeleteSubjectAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications', 'settings'];\n async execute(r) {\n const nodes = selectedNodesOf(r.explorer.get());\n const open = nodes.length ? null : r.navigation.activeTab()?.node;\n if (open) nodes.push(open);\n if (!nodes.length) {\n r.notifications.info('Pick a file first — highlight one in the list, or open it.');\n return;\n }\n const deleteThem = new DeleteAction(nodes.map((n) => n.id));\n if (!r.settings.get('explorer.confirmDelete')) return r.engine.dispatch(deleteThem);\n r.engine.dispatch(new ShowDialogAction({\n kind: 'confirm',\n title: `Move ${nodes.length} item${nodes.length > 1 ? 's' : ''} to the trash?`,\n body: nodes.length === 1\n ? `\"${nodes[0].name}\" leaves the drive but is kept, and can be restored from the trash.`\n : 'They leave the drive but are kept, and can be restored from the trash.',\n confirmLabel: 'Move to trash',\n confirmActions: [deleteThem],\n }));\n }\n}\n\n/** Show the trash, and get back to the drive to see it. */\nexport class ShowTrashAction extends Action {\n static deps = ['engine'];\n async execute({ engine }) {\n engine.dispatch(new TrashAction('list'));\n engine.dispatch(new ShowHomeAction());\n }\n}\n\n/** Open the subject in a viewer. */\nexport class OpenSubjectAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications'];\n constructor(node = null) { super(); this.node = node; }\n async execute(r) {\n const node = subjectOf(r, this.node);\n if (node) return r.engine.dispatch(new OpenFileAction(node));\n }\n}\n\n/** Save the subject to the machine. */\nexport class DownloadSubjectAction extends Action {\n static deps = ['api', 'explorer', 'navigation', 'notifications'];\n constructor(node = null) { super(); this.node = node; }\n async execute(r) {\n const target = subjectOf(r, this.node);\n if (!target?.id) return;\n try {\n const { url, revoke } = await r.api.download(target.id, target.name);\n triggerDownload(url, target.name);\n // A blob URL pins the bytes until it is released; the click has already happened by\n // the time this runs.\n if (revoke) setTimeout(() => URL.revokeObjectURL(url), 60_000);\n } catch (err) {\n r.notifications.error(`Couldn't download ${target.name}: ${err.message}`);\n }\n }\n}\n\n/** Keep a copy of the subject for offline use, or stop keeping one. */\nexport class PinAction extends Action {\n static deps = ['explorer', 'navigation', 'notifications', 'offline'];\n constructor(node = null, pinned = true) { super(); this.node = node; this.pinned = pinned; }\n async execute(r) {\n const target = subjectOf(r, this.node);\n if (!target?.id) return;\n return this.pinned ? r.offline.pin(target) : r.offline.unpin(target.id);\n }\n}\n\n// --- API keys (admin) ------------------------------------------------------------\n\nexport class StartApiKeyDraftAction extends ApiKeysAction {\n apply(s) { s.set({ draft: { name: '', expiresInDays: '', caps: {} }, error: null }); }\n}\nexport class CancelApiKeyDraftAction extends ApiKeysAction {\n apply(s) { s.set({ draft: null }); }\n}\n/** Forget the freshly minted secret. On dismiss, and after a copy. */\nexport class ClearMintedApiKeyAction extends ApiKeysAction {\n apply(s) { if (s.get().minted) s.set({ minted: null }); }\n}\n\n/**\n * Mint the key the draft describes.\n *\n * The days-to-instant conversion is here rather than in the form because the server compares\n * against its own clock: \"30 days from whenever this arrives\" is not what was chosen. The\n * draft is cleared BEFORE the mint so the form cannot be submitted twice while it is in\n * flight.\n */\nexport class MintApiKeyFromDraftAction extends Action {\n static deps = ['apiKeys', 'engine'];\n async execute({ apiKeys, engine }) {\n const draft = apiKeys.get().draft;\n const scopes = draftScopesOf(apiKeys.get());\n if (!draft?.name?.trim() || !scopes) return;\n const days = Number(draft.expiresInDays);\n const expiresAt = draft.expiresInDays !== '' && Number.isFinite(days) && days > 0\n ? Date.now() + days * 86400_000\n : null;\n apiKeys.set({ draft: null });\n return engine.dispatch(new MintApiKeyAction({ name: draft.name.trim(), scopes, expiresAt }));\n }\n}\n\n// --- collections -----------------------------------------------------------------\n\n/**\n * Switch to a collection, or offer the choice when none was named.\n *\n * From the palette or a keybinding there is no pointer to anchor a menu to, so it opens\n * centred near the top.\n */\nexport class SwitchCollectionAction extends Action {\n static deps = ['engine', 'explorer', 'notifications'];\n constructor(collectionId = null) { super(); this.collectionId = collectionId; }\n async execute({ engine, explorer, notifications }) {\n if (this.collectionId) {\n engine.dispatch(new NavigateAction(this.collectionId));\n engine.dispatch(new ShowHomeAction());\n return;\n }\n const items = collectionMenuOf(explorer.get(),\n (id) => new ExecCommandAction('collections.switch', id),\n () => new ExecCommandAction('collections.create'));\n if (!items.length) return notifications.info('This drive has one collection.');\n // No geometry: this comes from a command, not from a click, so the overlay centres it.\n // The arithmetic that used to be here needed `window` and carried a `typeof window`\n // guard precisely because layout has no business in the bl layer.\n engine.dispatch(new ShowContextMenuAction(items));\n }\n}\n\n/**\n * Show the details panel — but only when there is a file for it to be about.\n *\n * With nothing open there is nothing to show, and flipping the flag silently was\n * indistinguishable from a broken command.\n */\nexport class ToggleDetailsAction extends Action {\n static deps = ['navigation', 'notifications', 'workbench'];\n async execute({ navigation, notifications, workbench }) {\n if (!navigation.activeTab()) {\n notifications.info('Open a file to see its details and conversation.');\n return;\n }\n workbench.set({ infoPanel: !workbench.get().infoPanel });\n }\n}\n\n// --- plugins ---------------------------------------------------------------------\n\n/** Ask for a .zip and take it through the install review. */\nexport class PickAndInstallPluginAction extends Action {\n static deps = ['notifications', 'overlay', 'plugins', 'social', 'workbench'];\n async execute(r) {\n const file = await pickZip();\n if (file) await beginInstallFromFile(r, file);\n }\n}\n\n/**\n * Run a command a PLUGIN registered.\n *\n * Plugin commands used to be handlers proxying straight over RPC, which left the same hole\n * for them that `ExecCommandAction` closed for the host's own: the engine could see a plugin\n * command being invoked only as whatever state changed afterwards. Now every command in the\n * registry — host or plugin — resolves to actions.\n */\nexport class InvokePluginCommandAction extends Action {\n static deps = ['plugins'];\n constructor(pluginId, name, args = []) {\n super();\n this.pluginId = pluginId;\n this.name = name;\n this.args = args;\n }\n async execute({ plugins }) {\n return plugins.invokeCommand(this.pluginId, this.name, this.args);\n }\n}\n\n/**\n * Forget the open item's conversation — but only if it is still the one named.\n *\n * Dispatched when the last observer of a `sidecarFor` query goes away. Scoped to the node\n * because kill and boot are not ordered against each other: switching from A to B can kill\n * A's query after B's has booted, and an unscoped clear would wipe what B just loaded.\n */\nexport class ClearSidecarAction extends Action {\n static deps = ['social'];\n constructor(nodeId) { super(); this.nodeId = nodeId; }\n async execute({ social }) {\n if (social.get().sidecar?.nodeId === this.nodeId) social.loadSidecar(null);\n }\n}\n\n// --- key rotation ---------------------------------------------------------------\n//\n// Rotation moves a collection onto a fresh key, object by object, bounded by wall-clock\n// time per slice. It runs on the server; what the UI needs is to see where it is, what it\n// would cost before anyone starts, and a way to stop it.\n\n/**\n * Read where the rotation stands, and what one would cost.\n *\n * The estimate comes with the state rather than only before starting: on a metered store\n * this is a real bill, and the number is worth having in front of the button.\n */\n/**\n * Read one collection's access list.\n *\n * Takes the collection rather than reading the open one, because this is asked from a\n * screen that lists every collection — the rotation equivalent next door can assume the\n * open one and this cannot.\n */\nexport class LoadGrantsAction extends Action {\n static deps = ['acl', 'api', 'notifications'];\n constructor(collectionId) { super(); this.collectionId = collectionId; }\n async execute({ acl, api, notifications }) {\n const collectionId = this.collectionId;\n if (!collectionId) return;\n acl.set({ collectionId, loading: true, error: null });\n try {\n const res = await api.collectionGrants(collectionId);\n acl.set({ grants: res?.grants || [], admins: res?.admins || [], loading: false });\n } catch (err) {\n // A non-admin gets a 403, and that is the correct answer rather than an error worth\n // a toast — the section simply does not offer itself. Same reasoning as the rotation\n // loader immediately below.\n acl.set({ loading: false, error: err?.message || 'Could not read the access list' });\n if (err?.status !== 403) notifications.error?.(err?.message || 'Could not read the access list');\n }\n }\n}\n\n/**\n * Grant or revoke, which are one operation.\n *\n * An empty capability list removes the grant — that is `setGrant`'s existing shape, and\n * keeping it means revoking cannot drift from granting. Reloads afterwards rather than\n * patching the slice, because the server expands capabilities (admin implies the rest) and\n * a client that guessed the expansion would eventually disagree with it.\n */\nexport class SetGrantAction extends Action {\n static deps = ['acl', 'api', 'engine', 'notifications'];\n constructor(collectionId, grant) { super(); this.collectionId = collectionId; this.grant = grant; }\n async execute({ acl, api, engine, notifications }) {\n acl.set({ busy: true });\n try {\n await api.setCollectionGrant(this.collectionId, this.grant);\n const who = this.grant.type === 'anyone' ? 'everyone' : this.grant.subject;\n notifications.success?.(this.grant.capabilities?.length\n ? `Access for ${who} updated`\n : `Access for ${who} removed`);\n } catch (err) {\n notifications.error?.(err?.message || 'Could not change access');\n } finally {\n acl.set({ busy: false });\n await runAction(engine, new LoadGrantsAction(this.collectionId));\n }\n }\n}\n\nexport class LoadRotationAction extends Action {\n static deps = ['api', 'explorer', 'notifications', 'rotation'];\n\n /** @param {string} [collectionId] which collection; defaults to the open one */\n constructor(collectionId = null) { super(); this.collectionId = collectionId; }\n\n async execute({ api, explorer, notifications, rotation }) {\n const collectionId = this.collectionId || explorer.get().collectionId;\n if (!collectionId) return;\n // CLEARED when the collection changes, not merely re-stamped. `rotation` is one slice\n // for whichever collection the settings screen is looking at, and stamping the new id\n // while leaving the previous collection's `rotation` and `estimate` in place meant a\n // failed load — which sets only `{loading, error}` — left collection A's running\n // progress on screen under B's fingerprint, indefinitely, with a Start/Stop button\n // beside it.\n const switching = rotation.get().collectionId !== collectionId;\n rotation.set(switching\n ? { collectionId, rotation: null, estimate: null, loading: true, error: null }\n : { collectionId, loading: true, error: null });\n try {\n // Both together: the estimate is meaningless without knowing whether one is already\n // running, and a screen showing one without the other invites starting a second.\n const [state, estimate] = await Promise.all([\n api.rotationState(collectionId),\n api.rotationEstimate(collectionId).catch(() => null),\n ]);\n rotation.set({ rotation: state?.rotation ?? null, estimate: estimate ?? null, loading: false });\n } catch (err) {\n // A non-admin gets a 403 here and that is the correct answer, not an error worth a\n // toast — the section simply does not render.\n rotation.set({ loading: false, error: err?.message || 'Could not read the rotation state' });\n if (err?.status !== 403) notifications.error?.(err?.message || 'Could not read the rotation state');\n }\n }\n}\n\n/** Start moving this collection onto a new key. */\nexport class BeginRotationAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'rotation'];\n async execute({ api, engine, explorer, notifications, rotation }) {\n const collectionId = explorer.get().collectionId;\n if (!collectionId) return;\n rotation.set({ busy: true });\n try {\n const res = await api.beginRotation(collectionId);\n rotation.set({ rotation: res?.rotation ?? null, busy: false });\n // The new key becomes current immediately, before any file moves — so the\n // fingerprint on screen is already out of date. Reload the collections or it keeps\n // showing the key the collection is moving OFF, which is the one thing this field\n // exists to get right.\n engine.dispatch(new LoadCollectionsAction());\n notifications.info('Key rotation started. It runs in the background and survives a reload.');\n } catch (err) {\n rotation.set({ busy: false });\n notifications.error(err?.message || 'Could not start the rotation');\n }\n return engine.dispatch(new LoadRotationAction());\n }\n}\n\n/**\n * Stop one.\n *\n * What has already moved stays moved and the new key stays current, so this is untidy\n * rather than destructive — worth saying, because \"cancel\" on a job that has rewritten\n * half a collection sounds like it might undo something.\n */\nexport class CancelRotationAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'rotation'];\n async execute({ api, engine, explorer, notifications, rotation }) {\n const collectionId = explorer.get().collectionId;\n if (!collectionId) return;\n rotation.set({ busy: true });\n try {\n await api.cancelRotation(collectionId);\n notifications.info('Rotation stopped. Files already moved stay on the new key.');\n } catch (err) {\n notifications.error(err?.message || 'Could not stop the rotation');\n }\n rotation.set({ busy: false });\n return engine.dispatch(new LoadRotationAction());\n }\n}\n",
|
|
52
52
|
"// A minimal, symmetric JSON-RPC-ish channel over a MessagePort. Used on both\n// ends of the host↔plugin boundary: the host keeps one port, the sandboxed\n// iframe gets the other (transferred cross-origin at init), so neither side ever\n// touches the other's globals — everything is messages. Requests get a reply;\n// events are fire-and-forget. Handlers may be async and may throw; the error is\n// serialized (code/message) back to the caller as a rejected promise.\n\nexport class RpcChannel {\n /**\n * @param {MessagePort|Window} port a MessagePort (preferred) or window\n * @param {object} [opts]\n * @param {(method:string, params:any) => any} [opts.onCall] handler for incoming requests\n * @param {(method:string, params:any) => void} [opts.onEvent] handler for incoming events\n * @param {string} [opts.targetOrigin] required when port is a Window\n */\n constructor(port, opts = {}) {\n this.port = port;\n this.onCall = opts.onCall;\n this.onEvent = opts.onEvent;\n this.targetOrigin = opts.targetOrigin;\n this.seq = 0;\n this.pending = new Map();\n this._listener = (e) => this._receive(e.data, e);\n if (typeof port.addEventListener === 'function') port.addEventListener('message', this._listener);\n else port.onmessage = this._listener;\n port.start?.();\n }\n\n _post(msg, transfer) {\n if (this.targetOrigin) this.port.postMessage(msg, this.targetOrigin, transfer);\n else this.port.postMessage(msg, transfer);\n }\n\n /** Call a remote method, awaiting its result. */\n call(method, params, { timeout = 30000, transfer } = {}) {\n const id = ++this.seq;\n return new Promise((resolve, reject) => {\n const timer = timeout\n ? setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(`RPC timeout: ${method}`));\n }, timeout)\n : null;\n this.pending.set(id, { resolve, reject, timer });\n this._post({ __trove: 'req', id, method, params }, transfer);\n });\n }\n\n /** Fire an event; no reply expected. */\n emit(method, params, transfer) {\n this._post({ __trove: 'event', method, params }, transfer);\n }\n\n async _receive(msg, event) {\n if (!msg || msg.__trove == null) return;\n if (msg.__trove === 'res') {\n const p = this.pending.get(msg.id);\n if (!p) return;\n this.pending.delete(msg.id);\n if (p.timer) clearTimeout(p.timer);\n if (msg.error) p.reject(Object.assign(new Error(msg.error.message), msg.error));\n else p.resolve(msg.result);\n return;\n }\n if (msg.__trove === 'event') {\n try {\n await this.onEvent?.(msg.method, msg.params, event);\n } catch (err) {\n console.error('rpc event handler error', err);\n }\n return;\n }\n if (msg.__trove === 'req') {\n let result, error;\n try {\n result = await this.onCall?.(msg.method, msg.params, event);\n } catch (err) {\n error = { message: err?.message || String(err), code: err?.code || 'error' };\n }\n this._post({ __trove: 'res', id: msg.id, result, error });\n }\n }\n\n dispose() {\n if (typeof this.port.removeEventListener === 'function') {\n this.port.removeEventListener('message', this._listener);\n }\n for (const p of this.pending.values()) {\n if (p.timer) clearTimeout(p.timer);\n p.reject(new Error('RPC channel disposed'));\n }\n this.pending.clear();\n this.port.close?.();\n }\n}\n",
|
|
53
|
-
"// The host ↔ plugin wire protocol, in one place.\n//\n// Envelope (over the transferred MessagePort):\n// { __trove: 'req', id, method, params } plugin → host, expects a 'res'\n// { __trove: 'res', id, result | error } host → plugin\n// { __trove: 'event', method, params } either direction, fire-and-forget\n// Bootstrap (over postMessage, before the port exists):\n// { __trove: 'ready', protocolVersion } plugin → host\n// { __trove: 'init', manifest, capabilities, storage, online, role, protocolVersion }\n// { __trove: 'boot-error', error } plugin → host (module load failed)\n//\n// NOTE: browser.js is injected into the sandboxed frame as a TEXT blob (it must be a\n// self-contained IIFE with no imports), so it cannot import this module. It declares\n// its own `SDK_PROTOCOL_VERSION` constant instead, and protocol.test.js asserts the\n// two stay equal — a drift guard in place of an import.\n\n/** Bumped MAJOR when a change breaks older plugins; MINOR for additive changes. */\nexport const PROTOCOL_VERSION = '1.0';\n\nexport function majorOf(version) {\n return String(version || '').split('.')[0] || '0';\n}\n\n/** Whether a plugin built against `version` can talk to this host. */\nexport function isCompatible(version) {\n // An SDK older than versioning itself reports nothing — accept it (it predates the\n // field and the protocol hasn't broken yet); a differing MAJOR is a hard mismatch.\n if (!version) return true;\n return majorOf(version) === majorOf(PROTOCOL_VERSION);\n}\n\n// There are no `contribute:*` methods: contributions are DECLARED IN THE MANIFEST and\n// registered by the host before the plugin boots. A plugin can only ever drive what it\n// declared (`ui:status`, `context:setRegister`), never add to it.\n\n/** Canonical host methods a plugin may call. Grouped by namespace. */\nexport const METHODS = {\n activated: 'activated',\n // Note: 'command:execute' travels BOTH ways on the same channel — the host calls it\n // to run a plugin-contributed command, and a plugin calls it (needs that command in\n // its `commands` allowlist) to run someone else's. The direction disambiguates.\n command: { execute: 'command:execute' },\n resources: { list: 'resources:list', read: 'resources:read' },\n files: {\n read: 'files:read', list: 'files:list', stat: 'files:stat', downloadUrl: 'files:downloadUrl',\n index: 'files:index',\n // Bytes by range — the only way a viewer gets binary content at all, since `read`\n // answers text and a sandboxed frame cannot authenticate a bare download URL.\n bytes: 'files:bytes',\n // A minted URL for a media element. See pluginRpc.js for why this one host URL crosses.\n mediaUrl: 'files:mediaUrl',\n offline: {\n start: 'files:offline:start', status: 'files:offline:status',\n cancel: 'files:offline:cancel', remove: 'files:offline:remove',\n },\n },\n net: { fetch: 'net:fetch' },\n storage: { sql: 'storage:sql' },\n settings: { get: 'settings:get', set: 'settings:set', getSecret: 'settings:getSecret' },\n ui: { showPanel: 'ui:showPanel', status: 'ui:status' },\n context: { setRegister: 'context:setRegister' },\n media: { metadata: 'media:metadata', playbackState: 'media:playbackState', position: 'media:position', action: 'media:action', clear: 'media:clear' },\n dock: { enable: 'dock:enable', disable: 'dock:disable', close: 'dock:close' },\n};\n\n/** Events a plugin may emit to the host (fire-and-forget, no reply). */\nexport const EVENTS = {\n manifest: 'manifest',\n uiToast: 'ui:toast',\n uiBadge: 'ui:badge',\n};\n",
|
|
53
|
+
"// The host ↔ plugin wire protocol, in one place.\n//\n// Envelope (over the transferred MessagePort):\n// { __trove: 'req', id, method, params } plugin → host, expects a 'res'\n// { __trove: 'res', id, result | error } host → plugin\n// { __trove: 'event', method, params } either direction, fire-and-forget\n// Bootstrap (over postMessage, before the port exists):\n// { __trove: 'ready', protocolVersion } plugin → host\n// { __trove: 'init', manifest, capabilities, storage, online, role, protocolVersion }\n// { __trove: 'boot-error', error } plugin → host (module load failed)\n//\n// NOTE: browser.js is injected into the sandboxed frame as a TEXT blob (it must be a\n// self-contained IIFE with no imports), so it cannot import this module. It declares\n// its own `SDK_PROTOCOL_VERSION` constant instead, and protocol.test.js asserts the\n// two stay equal — a drift guard in place of an import.\n\n/** Bumped MAJOR when a change breaks older plugins; MINOR for additive changes. */\nexport const PROTOCOL_VERSION = '1.0';\n\nexport function majorOf(version) {\n return String(version || '').split('.')[0] || '0';\n}\n\n/** Whether a plugin built against `version` can talk to this host. */\nexport function isCompatible(version) {\n // An SDK older than versioning itself reports nothing — accept it (it predates the\n // field and the protocol hasn't broken yet); a differing MAJOR is a hard mismatch.\n if (!version) return true;\n return majorOf(version) === majorOf(PROTOCOL_VERSION);\n}\n\n// There are no `contribute:*` methods: contributions are DECLARED IN THE MANIFEST and\n// registered by the host before the plugin boots. A plugin can only ever drive what it\n// declared (`ui:status`, `context:setRegister`), never add to it.\n\n/** Canonical host methods a plugin may call. Grouped by namespace. */\nexport const METHODS = {\n activated: 'activated',\n // Note: 'command:execute' travels BOTH ways on the same channel — the host calls it\n // to run a plugin-contributed command, and a plugin calls it (needs that command in\n // its `commands` allowlist) to run someone else's. The direction disambiguates.\n command: { execute: 'command:execute' },\n resources: { list: 'resources:list', read: 'resources:read' },\n files: {\n read: 'files:read', list: 'files:list', stat: 'files:stat', downloadUrl: 'files:downloadUrl',\n index: 'files:index',\n // Bytes by range — the only way a viewer gets binary content at all, since `read`\n // answers text and a sandboxed frame cannot authenticate a bare download URL.\n bytes: 'files:bytes',\n // A minted URL for a media element. See pluginRpc.js for why this one host URL crosses.\n mediaUrl: 'files:mediaUrl',\n // Is the whole file here, and can I have it? The pair a viewer needs because the\n // frame's CSP forbids loading media from a URL — see pluginFrames.js.\n // A file's own key/value data for this plugin — local-first, merged with the\n // server opportunistically. See platform/itemData.js.\n dataGet: 'items:data:get',\n dataSet: 'items:data:set',\n dataRemove: 'items:data:remove',\n hasLocal: 'files:hasLocal',\n localBlob: 'files:localBlob',\n offline: {\n start: 'files:offline:start', status: 'files:offline:status',\n cancel: 'files:offline:cancel', remove: 'files:offline:remove',\n },\n },\n net: { fetch: 'net:fetch' },\n storage: { sql: 'storage:sql' },\n settings: { get: 'settings:get', set: 'settings:set', getSecret: 'settings:getSecret' },\n ui: { showPanel: 'ui:showPanel', status: 'ui:status' },\n context: { setRegister: 'context:setRegister' },\n media: { metadata: 'media:metadata', playbackState: 'media:playbackState', position: 'media:position', action: 'media:action', clear: 'media:clear' },\n dock: { enable: 'dock:enable', disable: 'dock:disable', close: 'dock:close' },\n};\n\n/** Events a plugin may emit to the host (fire-and-forget, no reply). */\nexport const EVENTS = {\n manifest: 'manifest',\n uiToast: 'ui:toast',\n uiBadge: 'ui:badge',\n};\n",
|
|
54
54
|
"/* es-module-lexer 1.7.0 */\nexport var ImportType;!function(A){A[A.Static=1]=\"Static\",A[A.Dynamic=2]=\"Dynamic\",A[A.ImportMeta=3]=\"ImportMeta\",A[A.StaticSourcePhase=4]=\"StaticSourcePhase\",A[A.DynamicSourcePhase=5]=\"DynamicSourcePhase\",A[A.StaticDeferPhase=6]=\"StaticDeferPhase\",A[A.DynamicDeferPhase=7]=\"DynamicDeferPhase\"}(ImportType||(ImportType={}));const A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];export function parse(E,g=\"@\"){if(!C)return init.then((()=>parse(E)));const I=E.length+1,w=(C.__heap_base.value||C.__heap_base)+4*I-C.memory.buffer.byteLength;w>0&&C.memory.grow(Math.ceil(w/65536));const K=C.sa(I-1);if((A?B:Q)(E,new Uint16Array(C.memory.buffer,K,I)),!C.parse())throw Object.assign(new Error(`Parse error ${g}:${E.slice(0,C.e()).split(\"\\n\").length}:${C.e()-E.lastIndexOf(\"\\n\",C.e()-1)}`),{idx:C.e()});const o=[],D=[];for(;C.ri();){const A=C.is(),Q=C.ie(),B=C.it(),g=C.ai(),I=C.id(),w=C.ss(),K=C.se();let D;C.ip()&&(D=k(E.slice(-1===I?A-1:A,-1===I?Q+1:Q))),o.push({n:D,t:B,s:A,e:Q,ss:w,se:K,d:I,a:g})}for(;C.re();){const A=C.es(),Q=C.ee(),B=C.els(),g=C.ele(),I=E.slice(A,Q),w=I[0],K=B<0?void 0:E.slice(B,g),o=K?K[0]:\"\";D.push({s:A,e:Q,ls:B,le:g,n:'\"'===w||\"'\"===w?k(I):I,ln:'\"'===o||\"'\"===o?k(K):K})}function k(A){try{return(0,eval)(A)}catch(A){}}return[o,D,!!C.f(),!!C.ms()]}function Q(A,Q){const B=A.length;let C=0;for(;C<B;){const B=A.charCodeAt(C);Q[C++]=(255&B)<<8|B>>>8}}function B(A,Q){const B=A.length;let C=0;for(;C<B;)Q[C]=A.charCodeAt(C++)}let C;const E=()=>{return A=\"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GzYCHAtBAEEAKAKwCkECajYCsAoCQAJAAkACQEEAECkiAUHhAEYNACABQfcARg0BQQAoArAKIQEMAgtBACgCsAoiAUECakHACEEKEC8NAUEGIQIMAgtBACgCsAoiAS8BAkHpAEcNACABLwEEQfQARw0AQQQhAiABLwEGQegARg0BC0EAIAFBfmo2ArAKDwtBACABIAJBAXRqNgKwCgJAQQEQKUH7AEYNAEEAIAE2ArAKDwtBACgCsAoiACECA0BBACACQQJqNgKwCgJAAkACQEEBECkiAkEiRg0AIAJBJ0cNAUEnEBpBAEEAKAKwCkECajYCsApBARApIQIMAgtBIhAaQQBBACgCsApBAmo2ArAKQQEQKSECDAELIAIQLCECCwJAIAJBOkYNAEEAIAE2ArAKDwtBAEEAKAKwCkECajYCsAoCQEEBECkiAkEiRg0AIAJBJ0YNAEEAIAE2ArAKDwsgAhAaQQBBACgCsApBAmo2ArAKAkACQEEBECkiAkEsRg0AIAJB/QBGDQFBACABNgKwCg8LQQBBACgCsApBAmo2ArAKQQEQKUH9AEYNAEEAKAKwCiECDAELC0EAKALwCSIBIAA2AhAgAUEAKAKwCkECajYCDAttAQJ/AkACQANAAkAgAEH//wNxIgFBd2oiAkEXSw0AQQEgAnRBn4CABHENAgsgAUGgAUYNASAAIQIgARAoDQJBACECQQBBACgCsAoiAEECajYCsAogAC8BAiIADQAMAgsLIAAhAgsgAkH//wNxC6sBAQR/AkACQEEAKAKwCiICLwEAIgNB4QBGDQAgASEEIAAhBQwBC0EAIAJBBGo2ArAKQQEQKSECQQAoArAKIQUCQAJAIAJBIkYNACACQSdGDQAgAhAsGkEAKAKwCiEEDAELIAIQGkEAQQAoArAKQQJqIgQ2ArAKC0EBECkhA0EAKAKwCiECCwJAIAIgBUYNACAFIARBACAAIAAgAUYiAhtBACABIAIbEAILIAMLcgEEf0EAKAKwCiEAQQAoArQKIQECQAJAA0AgAEECaiECIAAgAU8NAQJAAkAgAi8BACIDQaR/ag4CAQQACyACIQAgA0F2ag4EAgEBAgELIABBBGohAAwACwtBACACNgKwChAlQQAPC0EAIAI2ArAKQd0AC0kBA39BACEDAkAgAkUNAAJAA0AgAC0AACIEIAEtAAAiBUcNASABQQFqIQEgAEEBaiEAIAJBf2oiAg0ADAILCyAEIAVrIQMLIAMLC+wBAgBBgAgLzgEAAHgAcABvAHIAdABtAHAAbwByAHQAZgBvAHIAZQB0AGEAbwB1AHIAYwBlAHIAbwBtAHUAbgBjAHQAaQBvAG4AcwBzAGUAcgB0AHYAbwB5AGkAZQBkAGUAbABlAGMAbwBuAHQAaQBuAGkAbgBzAHQAYQBuAHQAeQBiAHIAZQBhAHIAZQB0AHUAcgBkAGUAYgB1AGcAZwBlAGEAdwBhAGkAdABoAHIAdwBoAGkAbABlAGkAZgBjAGEAdABjAGYAaQBuAGEAbABsAGUAbABzAABB0AkLEAEAAAACAAAAAAQAAEA5AAA=\",\"undefined\"!=typeof Buffer?Buffer.from(A,\"base64\"):Uint8Array.from(atob(A),(A=>A.charCodeAt(0)));var A};export const init=WebAssembly.compile(E()).then(WebAssembly.instantiate).then((({exports:A})=>{C=A}));export const initSync=()=>{if(C)return;const A=new WebAssembly.Module(E());C=new WebAssembly.Instance(A).exports};",
|
|
55
55
|
"// Multi-file plugins — native ESM without a bundler. A package can put its code\n// under `src/` and use ordinary relative imports (`import './util.js'`); assets\n// live anywhere else and are reached as opaque resources. We can't just let the\n// sandboxed frame import these: it's on an opaque origin and can't fetch its own\n// files, and a blob: module's base URL is meaningless so `./util.js` wouldn't\n// resolve. So the host loads every `src/*.js` module as a blob: URL inside the\n// frame and wires them together with an import map — and, because an import map is\n// keyed by name (not text order), circular imports and any load order just work.\n//\n// The one preprocessing step: relative specifiers are rewritten to a canonical\n// `trove:/<path>` key (resolved against the importing module) so they match the\n// import map instead of resolving against the opaque blob base. We use\n// es-module-lexer to find the exact specifier spans, so strings/comments/regex are\n// never touched. The SDK is exposed as the bare specifier `trove`, so plugins can\n// write either `import { activate } from 'trove'` or use the `globalThis.trove`\n// the injected SDK also sets.\n\nimport { init, parse } from 'es-module-lexer';\n\nconst JS_RE = /\\.m?js$/i;\n\n/** A file that participates in the module graph (code under `src/`). */\nexport function isSourceModule(path) {\n return /^src\\//i.test(path) && JS_RE.test(path);\n}\n\n/** Whether a package should run in ESM module mode (its entry is a src module). */\nexport function isModuleEntry(manifest) {\n return isSourceModule(manifest.entry || '');\n}\n\nfunction dirParts(p) {\n const i = p.lastIndexOf('/');\n return (i < 0 ? '' : p.slice(0, i)).split('/').filter(Boolean);\n}\n\n/** Resolve a relative specifier against the importer's package path. */\nfunction resolvePath(importer, spec) {\n const stack = dirParts(importer);\n for (const part of spec.split('/')) {\n if (part === '' || part === '.') continue;\n else if (part === '..') stack.pop();\n else stack.push(part);\n }\n return stack.join('/');\n}\n\n/**\n * Build the rewritten module set + entry for a package. Returns\n * { modules: { path: code }, entry } where each module's relative imports point at\n * canonical `trove:/<path>` keys. Only `src/*.js` files are included.\n */\nexport async function buildModuleGraph(pkg) {\n await init;\n const modules = {};\n for (const [path, bytes] of pkg.files) {\n if (isSourceModule(path)) modules[path] = new TextDecoder().decode(bytes);\n }\n const has = (p) => Object.prototype.hasOwnProperty.call(modules, p);\n const resolveModule = (importer, spec) => {\n const r = resolvePath(importer, spec);\n if (has(r)) return r;\n if (has(r + '.js')) return r + '.js';\n if (has(r + '.mjs')) return r + '.mjs';\n if (has(r + '/index.js')) return r + '/index.js';\n return r; // unresolved → import fails with a clear \"no such module\" error\n };\n const rewritten = {};\n for (const [path, code] of Object.entries(modules)) {\n rewritten[path] = rewriteSpecifiers(code, path, resolveModule);\n }\n return { modules: rewritten, entry: pkg.manifest.entry };\n}\n\n/** Rewrite relative import specifiers in one module to canonical map keys. */\nexport function rewriteSpecifiers(code, path, resolveModule) {\n const [imports] = parse(code);\n let out = '';\n let last = 0;\n for (const imp of imports) {\n if (imp.n == null) continue; // dynamic import with a non-literal argument\n if (imp.n[0] !== '.') continue; // only relative specifiers are remapped\n const key = 'trove:/' + resolveModule(path, imp.n);\n // Static spans exclude the quotes; dynamic import() spans include them.\n const replacement = imp.d === -1 ? key : JSON.stringify(key);\n out += code.slice(last, imp.s) + replacement;\n last = imp.e;\n }\n return out + code.slice(last);\n}\n",
|
|
56
56
|
"// FrameManager — the sandbox seam: everything about creating, handshaking with, and\n// destroying a plugin's iframe.\n//\n// A plugin's code runs inside a sandboxed iframe on an OPAQUE origin (sandbox\n// allow-scripts, no allow-same-origin): it can't touch the host DOM, can't read\n// cookies/storage, and can't even fetch its own package files. The host injects our\n// browser SDK + the plugin's entry into the frame's srcdoc; everything else flows over\n// a single transferred MessagePort, capability-gated by what the user granted.\n//\n// Every frame — the plugin's primary (background) instance and each viewer/panel —\n// comes from `spawn()`, so they all share the same wiring and capabilities.\n\nimport { RpcChannel } from '@3sln/trove/plugin-sdk/rpc.js';\nimport SDK_SOURCE from '@3sln/trove/plugin-sdk/browser.js' with { type: 'text' };\nimport { PROTOCOL_VERSION, isCompatible } from '@3sln/trove/plugin-sdk/protocol.js';\nimport { buildModuleGraph, isModuleEntry } from './pluginModules.js';\n\nconst HANDSHAKE_TIMEOUT_MS = 15000;\n\nexport class FrameManager {\n /**\n * @param {object} deps\n * @param {import('./pluginMedia.js').MediaController} deps.media\n * @param {import('./pluginDock.js').FrameDock} deps.dock\n */\n constructor({ media, dock } = {}) {\n this.media = media;\n this.dock = dock;\n }\n\n /**\n * Create ONE sandboxed iframe wired with `record`'s granted capabilities, run the\n * handshake, and resolve to a live frame `{ role, iframe, channel, record }`.\n * @param {object} record the plugin runtime record\n * @param {'primary'|'viewer'} role\n * @param {{onCall:Function, onEvent:Function, online:boolean}} wiring\n */\n async spawn(record, role, wiring) {\n const iframe = document.createElement('iframe');\n iframe.style.cssText = HIDDEN_STYLE;\n // Opaque-origin sandbox: scripts only, no same-origin, no top navigation.\n //\n // Deliberately NO `allow-popups`. The CSP below blocks fetch/XHR/WebSocket/beacon\n // so that all network access is brokered by the host against the plugin's declared\n // endpoints — but no CSP directive covers `window.open`, so a popup is a hole\n // straight through that broker: one real click and a plugin granted `files` but not\n // `network` can navigate a new context to `https://attacker/?d=<file bytes>`.\n // A plugin that genuinely needs to send the user somewhere asks the host to do it.\n iframe.setAttribute('sandbox', 'allow-scripts allow-forms');\n iframe.setAttribute('referrerpolicy', 'no-referrer');\n // A frame can boot at a different ENTRY MODULE of the plugin's one module tree —\n // that's all an opener is. Same package, same shared code, different entry.\n const entry = wiring?.entry;\n if (entry) {\n record._entrySrcdoc ||= {};\n record._entrySrcdoc[entry] ||= await buildSrcdoc({ ...record.manifest, entry }, record.files);\n iframe.srcdoc = record._entrySrcdoc[entry];\n } else {\n record._srcdoc ||= await buildSrcdoc(record.manifest, record.files);\n iframe.srcdoc = record._srcdoc;\n }\n const frame = { role, iframe, channel: null, record, place: null, dock: null, mediaActions: null };\n document.body.appendChild(iframe);\n try {\n await this.#handshake(record, frame, wiring);\n } catch (err) {\n // Never leave a hung/failed frame's iframe (or its channel) behind.\n try { frame.channel?.dispose(); } catch { /* ignore */ }\n iframe.remove();\n throw err;\n }\n return frame;\n }\n\n // Resolves once the frame's plugin calls activate(); rejects (and fully cleans up\n // its global message listener + timer) on boot error, iframe error, or timeout.\n #handshake(record, frame, { onCall, onEvent, online }) {\n return new Promise((resolve, reject) => {\n const { iframe } = frame;\n const manifest = record.manifest;\n let settled = false;\n let timer = 0;\n const cleanup = () => { window.removeEventListener('message', onReady); if (timer) clearTimeout(timer); };\n const fail = (msg) => { if (settled) return; settled = true; cleanup(); reject(new Error(msg)); };\n const onReady = (e) => {\n if (e.source !== iframe.contentWindow) return;\n if (e.data?.__trove === 'boot-error') return fail(e.data.error || 'Plugin failed to load its modules');\n if (e.data?.__trove !== 'ready') return;\n // A plugin built against an incompatible protocol MAJOR can't be talked to —\n // fail loudly here rather than letting calls misbehave in obscure ways.\n if (!isCompatible(e.data.protocolVersion)) {\n return fail(`Plugin speaks protocol ${e.data.protocolVersion}, this host speaks ${PROTOCOL_VERSION}`);\n }\n // Ready received — the transferred port takes over; stop listening globally.\n window.removeEventListener('message', onReady);\n const channel = new MessageChannel();\n frame.channel = new RpcChannel(channel.port1, {\n onCall: (m, p) => onCall(record, m, p, frame),\n onEvent: (m, p) => onEvent(record, m, p, frame),\n });\n // activate() success/failure settles this promise (and clears the timer).\n frame.resolveActivated = (f) => { if (settled) return; settled = true; if (timer) clearTimeout(timer); resolve(f); };\n frame.rejectActivated = (err) => { if (settled) return; settled = true; if (timer) clearTimeout(timer); reject(err); };\n // Opaque origin → target '*'; the transferred port is the real capability.\n iframe.contentWindow.postMessage(\n { __trove: 'init', manifest, capabilities: record.grants, storage: record.storage, online, role: frame.role, protocolVersion: PROTOCOL_VERSION },\n '*',\n [channel.port2],\n );\n };\n timer = setTimeout(() => fail('Plugin handshake timed out'), HANDSHAKE_TIMEOUT_MS);\n window.addEventListener('message', onReady);\n iframe.addEventListener('error', () => fail('Failed to load plugin iframe'));\n });\n }\n\n /**\n * Tear a frame down for good: stop tracking it, drop the dock/media session if it\n * held them, close its RPC channel, and remove the iframe from the DOM.\n */\n destroy(frame) {\n if (!frame) return;\n this.dock?.releaseFrame(frame);\n this.media?.releaseFrame(frame);\n try { frame.channel?.emit('deactivate'); } catch { /* ignore */ }\n try { frame.channel?.dispose(); } catch { /* ignore */ }\n frame.iframe.remove();\n frame.record?.frames?.delete(frame);\n }\n}\n\nconst HIDDEN_STYLE = 'position:fixed;left:0;top:0;width:0;height:0;border:0;visibility:hidden;';\n\n// The frame's CSP. `connect-src 'none'` means it cannot make ANY direct network\n// request (fetch/XHR/WebSocket/beacon) — all web access is brokered by the host and\n// confined to the plugin's declared endpoints. img/media/font are limited to\n// in-frame blob:/data: so remote loads can't be an exfiltration side-channel.\n// `blob:` in script-src is only for the plugin's own package modules (below), which\n// are same-origin blobs — no external code can load.\nconst CSP = [\n \"default-src 'none'\",\n \"script-src 'unsafe-inline' 'unsafe-eval' blob:\",\n \"style-src 'unsafe-inline'\",\n 'img-src blob: data:',\n 'media-src blob: data:',\n \"font-src 'none'\",\n \"connect-src 'none'\",\n \"base-uri 'none'\",\n \"form-action 'none'\",\n].join('; ');\n\nconst HEAD = `<!doctype html><html><head><meta charset=\"utf-8\"><meta http-equiv=\"Content-Security-Policy\" content=\"${CSP}\"></head><body>`;\n\n/** Build the iframe document — classic single-file, or ESM module mode (src/). */\nexport async function buildSrcdoc(manifest, files) {\n if (isModuleEntry(manifest)) return moduleBootstrapHtml(await buildModuleGraph({ manifest, files }));\n const entryJs = new TextDecoder().decode(files.get(manifest.entry) ?? new Uint8Array());\n return `${HEAD}\n<script>${SDK_SOURCE}<\\/script>\n<script>${entryJs}<\\/script>\n</body></html>`;\n}\n\n// Escape a value for safe inlining inside <script> (so `</script>` and JS line\n// separators in package code can't break out of the tag).\nfunction safeJson(value) {\n return JSON.stringify(value).replace(/</g, '\\\\u003c').replace(/\\u2028/g, '\\\\u2028').replace(/\\u2029/g, '\\\\u2029');\n}\n\n// ESM module mode: ship every src/ module as a blob: URL and wire them with an\n// import map keyed by canonical `trove:/<path>` specifiers (the specifiers in the\n// code were rewritten to match). `trove` resolves to a shim over the injected SDK.\nfunction moduleBootstrapHtml(graph) {\n const entryKey = safeJson('trove:/' + graph.entry);\n return `${HEAD}\n<script>${SDK_SOURCE}<\\/script>\n<script id=\"__trove_src\" type=\"application/json\">${safeJson(graph.modules)}<\\/script>\n<script>\n(function () {\n var src = JSON.parse(document.getElementById('__trove_src').textContent);\n var imports = {};\n for (var p in src) imports['trove:/' + p] = URL.createObjectURL(new Blob([src[p] + '\\\\n//# sourceURL=trove:/' + p], { type: 'text/javascript' }));\n imports['trove'] = URL.createObjectURL(new Blob(['export const activate = globalThis.trove.activate;\\\\nexport default globalThis.trove;'], { type: 'text/javascript' }));\n var im = document.createElement('script');\n im.type = 'importmap';\n im.textContent = JSON.stringify({ imports: imports });\n document.head.appendChild(im);\n import(${entryKey}).catch(function (e) {\n try { parent.postMessage({ __trove: 'boot-error', error: String((e && e.message) || e) }, '*'); } catch (_) {}\n });\n})();\n<\\/script>\n</body></html>`;\n}\n",
|
|
57
57
|
"// Which SQL a plugin may run against its own database.\n//\n// Its own module rather than part of sqlite.js because BOTH sides of the mirror need it\n// and only one of them can load a driver: the server checks before touching the on-disk\n// store, and the browser checks before touching the wasm one. Importing sqlite.js from\n// the web bundle would drag `bun:sqlite` in behind it.\n\nimport { TroveError } from '../errors.js';\n\n// Plugins run SQL against their OWN isolated database, but on a shared-filesystem\n// provider the sibling scope files are guessable, so `ATTACH DATABASE` would be an\n// isolation escape (and `DETACH` its pair). Strip comments + string/identifier\n// literals first so the keyword can't hide inside a value, then reject.\n\n// ATTACH/DETACH would reach a sibling scope's file. VACUUM INTO is worse and less\n// obvious: it writes a complete SQLite database to any path the server process can\n// create, whose pages contain rows the caller chose — attacker-chosen bytes at an\n// attacker-chosen path (a cron file, a webroot, authorized_keys). PRAGMA is refused\n// because several of them (database_list, temp_store_directory) either disclose host\n// paths or move where files land.\nconst DANGEROUS_SQL = /\\b(ATTACH|DETACH|VACUUM|PRAGMA)\\b/i;\n\n/** Blank out --/**-comments and '..'/\"..\"/`..`/[..] literals, preserving length-ish. */\nexport function stripSqlLiterals(sql) {\n let out = '';\n let i = 0;\n while (i < sql.length) {\n const c = sql[i];\n if (c === '-' && sql[i + 1] === '-') { const nl = sql.indexOf('\\n', i); i = nl < 0 ? sql.length : nl; continue; }\n if (c === '/' && sql[i + 1] === '*') { const e = sql.indexOf('*/', i + 2); i = e < 0 ? sql.length : e + 2; out += ' '; continue; }\n if (c === \"'\" || c === '\"' || c === '`') {\n const q = c; i++;\n while (i < sql.length) {\n if (sql[i] === q) { if (sql[i + 1] === q) { i += 2; continue; } i++; break; }\n i++;\n }\n out += ' '; continue;\n }\n if (c === '[') { const e = sql.indexOf(']', i); i = e < 0 ? sql.length : e + 1; out += ' '; continue; }\n out += c; i++;\n }\n return out;\n}\n\n/** Throw if plugin-supplied SQL tries to escape its isolated database. */\nexport function assertSafePluginSql(sql) {\n if (typeof sql !== 'string' || !sql) throw TroveError.invalid('SQL statement is required');\n if (DANGEROUS_SQL.test(stripSqlLiterals(sql))) {\n throw TroveError.invalid('ATTACH, DETACH, VACUUM and PRAGMA are not permitted in plugin storage');\n }\n}\n\n",
|
|
58
|
-
"// PluginRpcRouter — the trusted boundary: every call a sandboxed plugin makes into\n// the host lands here, is capability-gated against what the user granted at install\n// time, and is then serviced against host APIs the plugin can never reach directly.\n//\n// The frame has NO ambient authority: no host DOM, no cookies, no network\n// (connect-src 'none'), no access to its own package bytes. Everything it can do is\n// one of the methods below, and each one that touches something sensitive calls\n// `cap(...)` first. Extracted from PluginHost so the allow/deny logic is one focused\n// unit rather than sharing a class with iframe lifecycle and DOM placement.\n\nimport { networkEndpoints, canExecuteCommand, displayName } from './pluginPackage.js';\nimport { isAllowedUrl } from './pluginNet.js';\nimport { isSourceModule } from './pluginModules.js';\n// pluginHost.js already imports actions to build this router, so this widens an existing\n// edge rather than creating one — and it removes the third seam assigned onto `platform`\n// after construction, which is the shape that makes the resource graph not the whole story.\nimport { OpenPluginPanelAction } from '../bl/actions.js';\nimport { contribUri, parseContribUri } from '@3sln/trove/core/plugins/identity.js';\nimport { assertSafePluginSql } from '@3sln/trove/core/plugins/sql.js';\n\n// Response bodies larger than this are refused, so a plugin can't exhaust host\n// memory through the brokered fetch.\nconst MAX_FETCH_BYTES = 25 * 1024 * 1024;\n\n/**\n * Read a response body, aborting the moment it exceeds `max`.\n *\n * `await res.arrayBuffer()` then checking `.byteLength` does not achieve the thing the\n * cap exists for: by the time the check runs the whole body is already resident, so a\n * declared endpoint returning a multi-GB stream OOMs the tab before we ever refuse it.\n * Check the declared length first, then enforce while streaming in case it lied.\n */\nasync function readCappedBody(res, max) {\n const declared = Number(res.headers.get('content-length') || 0);\n if (declared && declared > max) throw new Error('Response too large');\n const reader = res.body?.getReader?.();\n if (!reader) {\n const buf = await res.arrayBuffer();\n if (buf.byteLength > max) throw new Error('Response too large');\n return buf;\n }\n const chunks = [];\n let total = 0;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n total += value.byteLength;\n if (total > max) { await reader.cancel().catch(() => {}); throw new Error('Response too large'); }\n chunks.push(value);\n }\n const out = new Uint8Array(total);\n let at = 0;\n for (const c of chunks) { out.set(c, at); at += c.byteLength; }\n return out.buffer;\n}\n\nexport class PluginRpcRouter {\n /**\n * @param {object} deps\n * @param {object} deps.platform host services (api, commands, contributions, settings, …)\n * @param {object} deps.clientDb on-device scoped SQLite provider\n * @param {import('./pluginMedia.js').MediaController} deps.media\n * @param {import('./pluginDock.js').FrameDock} deps.dock\n * @param {()=>void} deps.onChange notify listeners that plugin state changed\n */\n constructor({ platform, clientDb, media, dock, onChange } = {}) {\n this.platform = platform;\n this.clientDb = clientDb;\n this.media = media;\n this.dock = dock;\n this.onChange = onChange || (() => {});\n }\n\n // --- plugin → host RPC (calls: awaited, may return a value) -----------------\n\n async hostCall(record, method, params, frame) {\n const cap = (c) => { if (!record.grants.includes(c)) throw new Error(`Capability \"${c}\" not granted`); };\n const pid = record.id;\n switch (method) {\n case 'activated': {\n const f = frame || record.frame;\n clearTimeout(f?._timer);\n if (params.ok) f?.resolveActivated?.(f);\n else f?.rejectActivated?.(new Error(params.error || 'activate() failed'));\n return { ok: true };\n }\n\n // Run a command (the SDK's ctx.commands.execute). Gated per COMMAND, not per\n // capability: the plugin's manifest lists exactly which commands it may run\n // (plus its own, implicitly). A blanket \"commands\" grant would let a plugin that\n // wanted `workbench.view.home` also call `explorer.delete`.\n case 'command:execute': {\n const target = this.#resolveCommand(record, params.id);\n if (!canExecuteCommand(record.manifest, target)) {\n throw new Error(`Command \"${params.id}\" is not in this plugin's declared commands`);\n }\n const result = await this.platform.commands.execute(target, ...(params.args || []));\n return { ok: true, result: result ?? null };\n }\n\n // Drive a DECLARED status slot: push sanitized HTML into it, or show/hide it.\n // The slot itself is a manifest contribution — this only fills one in, so a\n // plugin can never grow its footprint in the shell past what was approved.\n case 'ui:status': {\n cap('ui');\n const slot = this.#ownContribution(record, params.name, 'statusItem');\n this.platform.contributions.update(slot.uri, {\n ...(params.html !== undefined ? { html: String(params.html ?? '') } : {}),\n ...(params.tooltip !== undefined ? { tooltip: String(params.tooltip ?? '') } : {}),\n ...(params.visible !== undefined ? { visible: !!params.visible } : { visible: true }),\n });\n return { ok: true };\n }\n\n // Set a DECLARED register — a context value slot other contributions' when-clauses\n // can read, addressed by its contribution URI.\n case 'context:setRegister': {\n const slot = this.#ownContribution(record, params.name, 'register');\n // The writer for a register the plugin declared. There is no path to a key it did\n // not declare, because it was never handed a setter for one.\n const write = record.registers?.get(slot.uri);\n if (!write) throw new Error(`Register \"${params.name}\" is not available`);\n write(params.value);\n return { ok: true };\n }\n // Package resources — opaque byte handles (transferred, no host URLs). Code\n // under src/ and the manifest are not resources (src/ is loaded as modules).\n case 'resources:list':\n return [...record.files.keys()].filter(isResourcePath);\n case 'resources:read': {\n if (!isResourcePath(params.path)) throw new Error(`No such resource ${params.path}`);\n const bytes = record.files.get(params.path);\n if (!bytes) throw new Error(`No such resource ${params.path}`);\n return { bytes: bytes.slice().buffer }; // copied into the iframe by structured clone\n }\n\n // Files — inherit the host's authenticated API client.\n case 'files:read': return cap('files'), { text: await this.platform.api.readText(params.id) };\n // ONE options object — `api.list(opts)`. Called as `list(pathOrId, params)` the\n // collection became the query string's key and everything else was dropped, so a\n // plugin asking for `photos` silently got the default collection unsorted.\n // A plugin has to say which collection it means, like everything else. The host\n // does not pick one for it — a plugin reaching into whatever collection happened to\n // be the default is exactly the ambient authority the capability list exists to stop.\n case 'files:list': return cap('files'), this.platform.api.list(\n params.collection || params.pathOrId,\n { sort: params.sort, order: params.order, limit: params.limit, cursor: params.cursor },\n );\n case 'files:stat': return cap('files'), this.platform.api.stat(params.id);\n\n // BYTES, by range. `files:read` answers text, which for an audiobook or any other\n // container is not slow, it is corrupt — and `files:downloadUrl` used to hand out a\n // bare route URL carrying no authorization, which an opaque-origin sandbox cannot\n // make good on: no cookies, no `Authorization` header, a 401 on any drive that\n // authenticates. So this is how a viewer gets bytes at all.\n //\n // Half-open `[start, end)`, and through `fileChunks` rather than the API directly:\n // a pinned file answers from disk, a file being kept offline contributes what it\n // fetches, and a file nobody asked to keep leaves nothing behind. See fileChunks.js.\n case 'files:bytes': {\n cap('files');\n const r = await this.platform.fileChunks.read(params.id, { start: params.start, end: params.end });\n // Transferred rather than copied: a 4 MiB chunk crossing by structured clone twice\n // per read is the difference between a seek and a stutter.\n return { bytes: r.bytes.buffer, etag: r.etag, total: r.total };\n }\n\n // Keeping a file offline, which is a DIFFERENT act from reading it — see\n // fileChunks.js. Until `start` is called, ranging over a file stores nothing.\n case 'files:offline:start': return cap('files'), this.platform.fileChunks.start(params.id);\n case 'files:offline:status': return cap('files'), this.platform.fileChunks.status(params.id);\n case 'files:offline:cancel': return cap('files'), (this.platform.fileChunks.cancel(params.id), { ok: true });\n case 'files:offline:remove': return cap('files'), this.platform.fileChunks.remove(params.id).then(() => ({ ok: true }));\n\n /**\n * A URL a media element can load on its own.\n *\n * The one place a host URL deliberately crosses into the sandbox, and it is minted —\n * it carries its own grant and expires, which is exactly what `platform/mediaUrls.js`\n * exists for: \"URLs for things that cannot send a header … an <img src>, a <video\n * src>\". The rule it bends is that plugins hold only opaque handles; the reason is\n * that `<audio src>` is the only way to stream a progressive MP4 without a\n * fragmenter, because MSE refuses one and a Blob has to be whole before it can\n * become an object URL. A viewer that can range-read for chapters and stream for\n * playback needs both, and this is the streaming half.\n */\n case 'files:mediaUrl': {\n cap('files');\n const { url, expiresAt } = await this.platform.mediaUrls.url(params.id, { op: params.op || 'media' });\n return { url, expiresAt };\n }\n case 'files:index': {\n cap('indexer');\n const ns = parseContribUri(params.indexerId) ? params.indexerId : contribUri(record.manifest, params.indexerId || 'default');\n return this.platform.api.pushIndex(ns, params.nodeId, {\n semanticTexts: params.semanticTexts, tags: params.tags, metadata: params.metadata,\n documents: params.documents, facet: params.facet, // legacy\n });\n }\n\n // Network — brokered by the host and confined to declared endpoints. The\n // sandboxed frame has no direct network at all (connect-src 'none').\n case 'net:fetch': cap('network'); return this.#brokerFetch(record, params);\n\n // Persistent storage — an isolated SQLite database per scope (plugin/domain),\n // on the server or on-device. SQL runs only against the plugin's own scoped db.\n case 'storage:sql': cap('storage'); return this.#pluginSql(record, params);\n\n // Plugin settings + secrets.\n case 'settings:get': return this.platform.settings.get(`${pid}.${params.key}`);\n case 'settings:getSecret': return record.secrets?.[params.key] ?? null;\n case 'settings:set':\n this.platform.settings.set(`${pid}.${params.key}`, params.value);\n return { ok: true };\n\n // Putting a panel on screen is a UI action, and this was the one `ui:` method with\n // no check — so a plugin granted nothing at all could open its own panel (and, with\n // an unvalidated displayName, render into the host page from `activate()`).\n case 'ui:showPanel':\n cap('ui');\n record.hasUi = true;\n this.platform.dispatch(new OpenPluginPanelAction(pid));\n this.onChange();\n return { ok: true };\n\n // Media session — the host owns navigator.mediaSession; the calling frame\n // (a viewer) surfaces its playback so the OS shows transport controls. Actions\n // fire back over that same frame's RPC channel.\n // Artwork is a URL the BROWSER fetches on the plugin's behalf, so it is egress\n // and belongs under the same allowlist the broker enforces. Left open, `media`\n // alone bought an outbound GET to any URL the plugin chose — the exfiltration\n // channel `connect-src 'none'` and the broker exist to close.\n case 'media:metadata': {\n cap('media');\n const artwork = (params.artwork || []).filter((a) => this.#artworkAllowed(record, a?.src));\n return this.media.apply(frame, 'metadata', { ...params, artwork });\n }\n case 'media:playbackState': cap('media'); return this.media.apply(frame, 'playbackState', params);\n case 'media:position': cap('media'); return this.media.apply(frame, 'position', params);\n case 'media:action': cap('media'); return this.media.apply(frame, 'action', params);\n case 'media:clear': return this.media.apply(frame, 'clear', params);\n\n // Dock — the calling frame registers/unregisters itself for the floating dock.\n case 'dock:enable': cap('dock'); if (frame) frame.dock = { enabled: true, minSize: params.minSize, maxSize: params.maxSize, dismissed: false }; return { ok: true };\n case 'dock:disable': cap('dock'); if (frame?.dock) frame.dock.enabled = false; if (frame && this.dock.docked === frame) this.dock.closeDock(frame); return { ok: true };\n case 'dock:close': if (frame) this.dock.closeDock(frame); return { ok: true };\n\n default:\n throw new Error(`Unknown host method ${method}`);\n }\n }\n\n // --- plugin → host events (fire-and-forget) --------------------------------\n\n hostEvent(record, method, params, frame) {\n switch (method) {\n case 'manifest':\n // Only the primary frame's manifest defines the plugin's live feature list;\n // a viewer frame re-announces its own (opener-only) manifest — ignore it.\n if (frame && frame.role !== 'primary') break;\n record.live = params; record.responsive = true;\n this.onChange();\n break;\n case 'ui:toast':\n this.platform.notifications[params.level || 'info'](`${displayName(record.manifest)}: ${params.text}`);\n break;\n case 'ui:badge':\n record.badge = params.text; this.onChange();\n break;\n }\n }\n\n // --- addressing ------------------------------------------------------------\n\n /**\n * Resolve a command reference from inside a plugin frame. A plugin names its OWN\n * commands by their short contribution name (that's the only name it knows); anything\n * else must be a full address — a built-in like `explorer.download`, or another\n * plugin's contribution URI.\n */\n #resolveCommand(record, id) {\n if (!id || parseContribUri(id)) return id;\n const own = this.platform.contributions.get(contribUri(record.manifest, id));\n return own?.type === 'command' ? own.uri : id;\n }\n\n /**\n * The plugin's own contribution called `name`, of the expected type. Anything else —\n * a name it never declared, or one of the wrong type — is refused: a plugin drives\n * only slots the user saw and approved at install.\n */\n #ownContribution(record, name, type) {\n const c = name ? this.platform.contributions.get(contribUri(record.manifest, name)) : null;\n if (!c || c.pluginId !== record.id || c.type !== type) {\n throw new Error(`\"${name}\" is not a ${type} declared by this plugin`);\n }\n return c;\n }\n\n // --- brokered capabilities -------------------------------------------------\n\n /**\n * Perform a network request on a plugin's behalf, but only to a URL it declared\n * in its manifest `network` allowlist. The request runs from the host with\n * credentials omitted (no ambient cookies/auth), and any redirect that lands\n * off the allowlist is rejected.\n */\n /** blob:/data: carry their own bytes; anything else must be a declared endpoint. */\n #artworkAllowed(record, src) {\n if (!src) return false;\n if (/^(blob:|data:image\\/)/i.test(src)) return true;\n return isAllowedUrl(networkEndpoints(record.manifest), src);\n }\n\n async #brokerFetch(record, { url, method = 'GET', headers, body }) {\n const allow = networkEndpoints(record.manifest);\n // The drive itself is never a \"network endpoint\".\n //\n // The broker runs in the HOST page, which is same-origin with the API. A manifest\n // declaring `network: [\"https://*.com/\"]` matches essentially any drive host, so a\n // plugin approved only for \"connect to the internet\" could call /api/items,\n // /api/items/delete, and other plugins' /api/plugins/:id/sql directly — collecting\n // the whole `files` capability, the per-command grant system, and every other\n // plugin's server-side store in one hop, none of which the user approved. Those\n // routes have a legitimate caller: the host, through the capability-gated methods\n // above.\n if (sameOrigin(url, this.platform.api?.baseUrl)) {\n throw new Error('Blocked: a plugin may not call the drive\\'s own API through the network broker');\n }\n if (!isAllowedUrl(allow, url)) {\n throw new Error(`Blocked: \"${url}\" is not one of this plugin's declared network endpoints`);\n }\n const init = { method, credentials: 'omit', redirect: 'follow', headers: sanitizeHeaders(headers) };\n if (body != null && method !== 'GET' && method !== 'HEAD') {\n init.body = body instanceof ArrayBuffer ? new Uint8Array(body) : body;\n }\n const res = await fetch(url, init);\n // A redirect chain must not escape the declared endpoints — nor land back on the\n // drive, which a declared endpoint is free to redirect to.\n if (res.url && res.url !== url) {\n if (sameOrigin(res.url, this.platform.api?.baseUrl)) {\n throw new Error('Blocked: request redirected onto the drive\\'s own API');\n }\n if (!isAllowedUrl(allow, res.url)) {\n throw new Error(`Blocked: request redirected off this plugin's declared endpoints (${res.url})`);\n }\n }\n const buf = await readCappedBody(res, MAX_FETCH_BYTES);\n const outHeaders = {};\n res.headers.forEach((v, k) => { outHeaders[k] = v; });\n return { ok: res.ok, status: res.status, statusText: res.statusText, url: res.url, headers: outHeaders, bytes: buf };\n }\n\n /**\n * Plugin storage: run a SQL op against one scoped, isolated database. `scope` is\n * 'plugin' or 'domain' (each granted separately); `side` is 'server' or 'client'.\n */\n async #pluginSql(record, { scope = 'plugin', side = 'server', op, sql, params = [], statements }) {\n if (!record.storage?.[scope]) {\n throw new Error(`Storage scope \"${scope}\" not granted${scope === 'domain' ? ' (needs a verified domain)' : ''}`);\n }\n if (side === 'client') {\n // On-device: an isolated wasm SQLite db per scope, held by the host. Domain\n // scope keys by the verified domain so a vendor's plugins share it.\n //\n // Same guard as the server path. The client dbs share ONE emscripten module\n // across every scope, so ATTACH / VACUUM INTO / PRAGMA are an isolation escape\n // here for the same reason they are on disk — the blast radius is the browser's\n // in-memory filesystem rather than the host's, which makes it smaller, not fine.\n if (op === 'batch') for (const s of (Array.isArray(statements) ? statements : [])) assertSafePluginSql(s?.sql);\n else assertSafePluginSql(sql);\n const key = scope === 'domain' ? `dom:${record.manifest.domain}` : `plg:${record.id}`;\n const db = await this.clientDb.obtain(key);\n return runSqlOp(db, op, sql, params, statements);\n }\n // Server: the host proxies to the scoped db over the authenticated API; the\n // domain (for the shared scope) comes from the verified install record, never\n // the plugin.\n const body = { scope, op, sql, params, statements, domain: scope === 'domain' ? record.manifest.domain : undefined };\n const res = await this.platform.api.request('POST', `/api/plugins/${encodeURIComponent(record.id)}/sql`, { body });\n return res.result;\n }\n}\n\n/**\n * Is `url` on the drive's own origin?\n *\n * `baseUrl` is '' in the shipped app (the API is served from the same origin as the\n * page), so the comparison is against `location.origin`; a library caller pointing the\n * client at another host gets that one. A redirect is checked separately, on the way\n * back, since a declared endpoint could redirect here.\n */\nfunction sameOrigin(url, baseUrl) {\n try {\n const here = new URL(baseUrl || '', globalThis.location?.href || 'http://localhost/');\n return new URL(url, here).origin === here.origin;\n } catch {\n return false;\n }\n}\n\n/** True for files a plugin can read as opaque resources (not code, not manifest). */\nfunction isResourcePath(path) {\n return path !== 'manifest.json' && !isSourceModule(path);\n}\n\n// Drop headers the plugin isn't allowed to set (the browser forbids most of these\n// anyway; we strip explicitly so intent is clear and cookies never ride along).\nconst FORBIDDEN_HEADERS = new Set(['host', 'cookie', 'cookie2', 'set-cookie', 'origin', 'referer', 'content-length', 'connection']);\nfunction sanitizeHeaders(headers) {\n const out = {};\n for (const [k, v] of Object.entries(headers || {})) {\n if (!FORBIDDEN_HEADERS.has(String(k).toLowerCase())) out[k] = v;\n }\n return out;\n}\n\n// Dispatch one SQL op onto a SqliteDatabase-shaped handle (the client store; the\n// server mirrors this in routes.js).\nfunction runSqlOp(db, op, sql, params = [], statements) {\n switch (op) {\n case 'exec': return db.exec(sql);\n case 'run': return db.run(sql, ...params);\n case 'get': return db.get(sql, ...params);\n case 'all': return db.all(sql, ...params);\n case 'batch': return db.batch(statements);\n default: throw new Error(`Unknown storage op \"${op}\"`);\n }\n}\n",
|
|
58
|
+
"// PluginRpcRouter — the trusted boundary: every call a sandboxed plugin makes into\n// the host lands here, is capability-gated against what the user granted at install\n// time, and is then serviced against host APIs the plugin can never reach directly.\n//\n// The frame has NO ambient authority: no host DOM, no cookies, no network\n// (connect-src 'none'), no access to its own package bytes. Everything it can do is\n// one of the methods below, and each one that touches something sensitive calls\n// `cap(...)` first. Extracted from PluginHost so the allow/deny logic is one focused\n// unit rather than sharing a class with iframe lifecycle and DOM placement.\n\nimport { networkEndpoints, canExecuteCommand, displayName } from './pluginPackage.js';\nimport { isAllowedUrl } from './pluginNet.js';\nimport { isSourceModule } from './pluginModules.js';\n// pluginHost.js already imports actions to build this router, so this widens an existing\n// edge rather than creating one — and it removes the third seam assigned onto `platform`\n// after construction, which is the shape that makes the resource graph not the whole story.\nimport { OpenPluginPanelAction } from '../bl/actions.js';\nimport { contribUri, parseContribUri } from '@3sln/trove/core/plugins/identity.js';\nimport { assertSafePluginSql } from '@3sln/trove/core/plugins/sql.js';\n\n// Response bodies larger than this are refused, so a plugin can't exhaust host\n// memory through the brokered fetch.\nconst MAX_FETCH_BYTES = 25 * 1024 * 1024;\n\n/**\n * Read a response body, aborting the moment it exceeds `max`.\n *\n * `await res.arrayBuffer()` then checking `.byteLength` does not achieve the thing the\n * cap exists for: by the time the check runs the whole body is already resident, so a\n * declared endpoint returning a multi-GB stream OOMs the tab before we ever refuse it.\n * Check the declared length first, then enforce while streaming in case it lied.\n */\nasync function readCappedBody(res, max) {\n const declared = Number(res.headers.get('content-length') || 0);\n if (declared && declared > max) throw new Error('Response too large');\n const reader = res.body?.getReader?.();\n if (!reader) {\n const buf = await res.arrayBuffer();\n if (buf.byteLength > max) throw new Error('Response too large');\n return buf;\n }\n const chunks = [];\n let total = 0;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n total += value.byteLength;\n if (total > max) { await reader.cancel().catch(() => {}); throw new Error('Response too large'); }\n chunks.push(value);\n }\n const out = new Uint8Array(total);\n let at = 0;\n for (const c of chunks) { out.set(c, at); at += c.byteLength; }\n return out.buffer;\n}\n\nexport class PluginRpcRouter {\n /**\n * @param {object} deps\n * @param {object} deps.platform host services (api, commands, contributions, settings, …)\n * @param {object} deps.clientDb on-device scoped SQLite provider\n * @param {import('./pluginMedia.js').MediaController} deps.media\n * @param {import('./pluginDock.js').FrameDock} deps.dock\n * @param {()=>void} deps.onChange notify listeners that plugin state changed\n */\n constructor({ platform, clientDb, media, dock, onChange } = {}) {\n this.platform = platform;\n this.clientDb = clientDb;\n this.media = media;\n this.dock = dock;\n this.onChange = onChange || (() => {});\n }\n\n // --- plugin → host RPC (calls: awaited, may return a value) -----------------\n\n async hostCall(record, method, params, frame) {\n const cap = (c) => { if (!record.grants.includes(c)) throw new Error(`Capability \"${c}\" not granted`); };\n const pid = record.id;\n switch (method) {\n case 'activated': {\n const f = frame || record.frame;\n clearTimeout(f?._timer);\n if (params.ok) f?.resolveActivated?.(f);\n else f?.rejectActivated?.(new Error(params.error || 'activate() failed'));\n return { ok: true };\n }\n\n // Run a command (the SDK's ctx.commands.execute). Gated per COMMAND, not per\n // capability: the plugin's manifest lists exactly which commands it may run\n // (plus its own, implicitly). A blanket \"commands\" grant would let a plugin that\n // wanted `workbench.view.home` also call `explorer.delete`.\n case 'command:execute': {\n const target = this.#resolveCommand(record, params.id);\n if (!canExecuteCommand(record.manifest, target)) {\n throw new Error(`Command \"${params.id}\" is not in this plugin's declared commands`);\n }\n const result = await this.platform.commands.execute(target, ...(params.args || []));\n return { ok: true, result: result ?? null };\n }\n\n // Drive a DECLARED status slot: push sanitized HTML into it, or show/hide it.\n // The slot itself is a manifest contribution — this only fills one in, so a\n // plugin can never grow its footprint in the shell past what was approved.\n case 'ui:status': {\n cap('ui');\n const slot = this.#ownContribution(record, params.name, 'statusItem');\n this.platform.contributions.update(slot.uri, {\n ...(params.html !== undefined ? { html: String(params.html ?? '') } : {}),\n ...(params.tooltip !== undefined ? { tooltip: String(params.tooltip ?? '') } : {}),\n ...(params.visible !== undefined ? { visible: !!params.visible } : { visible: true }),\n });\n return { ok: true };\n }\n\n // Set a DECLARED register — a context value slot other contributions' when-clauses\n // can read, addressed by its contribution URI.\n case 'context:setRegister': {\n const slot = this.#ownContribution(record, params.name, 'register');\n // The writer for a register the plugin declared. There is no path to a key it did\n // not declare, because it was never handed a setter for one.\n const write = record.registers?.get(slot.uri);\n if (!write) throw new Error(`Register \"${params.name}\" is not available`);\n write(params.value);\n return { ok: true };\n }\n // Package resources — opaque byte handles (transferred, no host URLs). Code\n // under src/ and the manifest are not resources (src/ is loaded as modules).\n case 'resources:list':\n return [...record.files.keys()].filter(isResourcePath);\n case 'resources:read': {\n if (!isResourcePath(params.path)) throw new Error(`No such resource ${params.path}`);\n const bytes = record.files.get(params.path);\n if (!bytes) throw new Error(`No such resource ${params.path}`);\n return { bytes: bytes.slice().buffer }; // copied into the iframe by structured clone\n }\n\n // Files — inherit the host's authenticated API client.\n case 'files:read': return cap('files'), { text: await this.platform.api.readText(params.id) };\n // ONE options object — `api.list(opts)`. Called as `list(pathOrId, params)` the\n // collection became the query string's key and everything else was dropped, so a\n // plugin asking for `photos` silently got the default collection unsorted.\n // A plugin has to say which collection it means, like everything else. The host\n // does not pick one for it — a plugin reaching into whatever collection happened to\n // be the default is exactly the ambient authority the capability list exists to stop.\n case 'files:list': return cap('files'), this.platform.api.list(\n params.collection || params.pathOrId,\n { sort: params.sort, order: params.order, limit: params.limit, cursor: params.cursor },\n );\n case 'files:stat': return cap('files'), this.platform.api.stat(params.id);\n\n // BYTES, by range. `files:read` answers text, which for an audiobook or any other\n // container is not slow, it is corrupt — and `files:downloadUrl` used to hand out a\n // bare route URL carrying no authorization, which an opaque-origin sandbox cannot\n // make good on: no cookies, no `Authorization` header, a 401 on any drive that\n // authenticates. So this is how a viewer gets bytes at all.\n //\n // Half-open `[start, end)`, and through `fileChunks` rather than the API directly:\n // a pinned file answers from disk, a file being kept offline contributes what it\n // fetches, and a file nobody asked to keep leaves nothing behind. See fileChunks.js.\n case 'files:bytes': {\n cap('files');\n const r = await this.platform.fileChunks.read(params.id, { start: params.start, end: params.end });\n // Transferred rather than copied: a 4 MiB chunk crossing by structured clone twice\n // per read is the difference between a seek and a stutter.\n return { bytes: r.bytes.buffer, etag: r.etag, total: r.total };\n }\n\n // Is the whole file already HERE, in this browser?\n //\n // The question a viewer has to ask before deciding what to draw, and it is cheap on\n // purpose: `status` reads bookkeeping, not bytes, so a plugin can ask on every open\n // without pulling a hundred megabytes to find out the answer is no.\n case 'files:hasLocal': {\n cap('files');\n const st = this.platform.fileChunks.status(params.id);\n return { local: !!st.done, loaded: st.loaded, total: st.total, ratio: st.ratio, filling: st.filling };\n }\n\n // The whole file as a real Blob, or null.\n //\n // This exists because of the frame's CSP: `media-src blob: data:` and\n // `connect-src 'none'`, deliberately, so a viewer CANNOT load a media URL — see\n // pluginFrames.js. A Blob it can. So a downloaded book plays by handing the frame\n // the bytes it already paid for, rather than by punching a hole in the sandbox.\n //\n // Null rather than a partial when the file is incomplete: half an MP4 is not a\n // shorter MP4, and a viewer that got one would fail in a way that looks like a\n // decoder bug instead of a missing download.\n case 'files:localBlob': {\n cap('files');\n const st = this.platform.fileChunks.status(params.id);\n if (!st.done || !st.total) return { blob: null };\n const r = await this.platform.fileChunks.read(params.id, { start: 0, end: st.total });\n // A Blob crosses by structured clone WITHOUT copying its bytes — the handle is\n // refcounted — which is why this is a Blob and not the ArrayBuffer `files:bytes`\n // transfers. Transferring would detach the buffer the offline store is holding.\n const node = await this.platform.api.stat(params.id).catch(() => null);\n return { blob: new Blob([r.bytes], { type: node?.node?.contentType || 'application/octet-stream' }) };\n }\n\n // A plugin's own key/value data for an item — see sidecar/document.js.\n //\n // The scope is derived from the AUTHENTICATED plugin, never from the params: a\n // frame asking for someone else's namespace gets its own. That is the same rule\n // `files:index` follows for contributions, and the reason \"scoped\" is a boundary\n // rather than a naming convention.\n case 'items:data:get': {\n cap('files');\n return this.platform.itemData.get(pid, params.id);\n }\n case 'items:data:set': {\n cap('files');\n // Written locally FIRST and flushed later, so a viewer that saves a position on a\n // train keeps it, and the merge happens when there is a network again. See\n // platform/itemData.js.\n return this.platform.itemData.set(pid, params.id, params.key, params.value);\n }\n case 'items:data:remove': {\n cap('files');\n return this.platform.itemData.remove(pid, params.id, params.key);\n }\n\n // Keeping a file offline, which is a DIFFERENT act from reading it — see\n // fileChunks.js. Until `start` is called, ranging over a file stores nothing.\n case 'files:offline:start': return cap('files'), this.platform.fileChunks.start(params.id);\n case 'files:offline:status': return cap('files'), this.platform.fileChunks.status(params.id);\n case 'files:offline:cancel': return cap('files'), (this.platform.fileChunks.cancel(params.id), { ok: true });\n case 'files:offline:remove': return cap('files'), this.platform.fileChunks.remove(params.id).then(() => ({ ok: true }));\n\n /**\n * A URL a media element can load on its own.\n *\n * The one place a host URL deliberately crosses into the sandbox, and it is minted —\n * it carries its own grant and expires, which is exactly what `platform/mediaUrls.js`\n * exists for: \"URLs for things that cannot send a header … an <img src>, a <video\n * src>\". The rule it bends is that plugins hold only opaque handles; the reason is\n * that `<audio src>` is the only way to stream a progressive MP4 without a\n * fragmenter, because MSE refuses one and a Blob has to be whole before it can\n * become an object URL. A viewer that can range-read for chapters and stream for\n * playback needs both, and this is the streaming half.\n */\n case 'files:mediaUrl': {\n cap('files');\n const { url, expiresAt } = await this.platform.mediaUrls.url(params.id, { op: params.op || 'media' });\n return { url, expiresAt };\n }\n case 'files:index': {\n cap('indexer');\n const ns = parseContribUri(params.indexerId) ? params.indexerId : contribUri(record.manifest, params.indexerId || 'default');\n return this.platform.api.pushIndex(ns, params.nodeId, {\n semanticTexts: params.semanticTexts, tags: params.tags, metadata: params.metadata,\n documents: params.documents, facet: params.facet, // legacy\n });\n }\n\n // Network — brokered by the host and confined to declared endpoints. The\n // sandboxed frame has no direct network at all (connect-src 'none').\n case 'net:fetch': cap('network'); return this.#brokerFetch(record, params);\n\n // Persistent storage — an isolated SQLite database per scope (plugin/domain),\n // on the server or on-device. SQL runs only against the plugin's own scoped db.\n case 'storage:sql': cap('storage'); return this.#pluginSql(record, params);\n\n // Plugin settings + secrets.\n case 'settings:get': return this.platform.settings.get(`${pid}.${params.key}`);\n case 'settings:getSecret': return record.secrets?.[params.key] ?? null;\n case 'settings:set':\n this.platform.settings.set(`${pid}.${params.key}`, params.value);\n return { ok: true };\n\n // Putting a panel on screen is a UI action, and this was the one `ui:` method with\n // no check — so a plugin granted nothing at all could open its own panel (and, with\n // an unvalidated displayName, render into the host page from `activate()`).\n case 'ui:showPanel':\n cap('ui');\n record.hasUi = true;\n this.platform.dispatch(new OpenPluginPanelAction(pid));\n this.onChange();\n return { ok: true };\n\n // Media session — the host owns navigator.mediaSession; the calling frame\n // (a viewer) surfaces its playback so the OS shows transport controls. Actions\n // fire back over that same frame's RPC channel.\n // Artwork is a URL the BROWSER fetches on the plugin's behalf, so it is egress\n // and belongs under the same allowlist the broker enforces. Left open, `media`\n // alone bought an outbound GET to any URL the plugin chose — the exfiltration\n // channel `connect-src 'none'` and the broker exist to close.\n case 'media:metadata': {\n cap('media');\n const artwork = (params.artwork || []).filter((a) => this.#artworkAllowed(record, a?.src));\n return this.media.apply(frame, 'metadata', { ...params, artwork });\n }\n case 'media:playbackState': cap('media'); return this.media.apply(frame, 'playbackState', params);\n case 'media:position': cap('media'); return this.media.apply(frame, 'position', params);\n case 'media:action': cap('media'); return this.media.apply(frame, 'action', params);\n case 'media:clear': return this.media.apply(frame, 'clear', params);\n\n // Dock — the calling frame registers/unregisters itself for the floating dock.\n case 'dock:enable': cap('dock'); if (frame) frame.dock = { enabled: true, minSize: params.minSize, maxSize: params.maxSize, dismissed: false }; return { ok: true };\n case 'dock:disable': cap('dock'); if (frame?.dock) frame.dock.enabled = false; if (frame && this.dock.docked === frame) this.dock.closeDock(frame); return { ok: true };\n case 'dock:close': if (frame) this.dock.closeDock(frame); return { ok: true };\n\n default:\n throw new Error(`Unknown host method ${method}`);\n }\n }\n\n // --- plugin → host events (fire-and-forget) --------------------------------\n\n hostEvent(record, method, params, frame) {\n switch (method) {\n case 'manifest':\n // Only the primary frame's manifest defines the plugin's live feature list;\n // a viewer frame re-announces its own (opener-only) manifest — ignore it.\n if (frame && frame.role !== 'primary') break;\n record.live = params; record.responsive = true;\n this.onChange();\n break;\n case 'ui:toast':\n this.platform.notifications[params.level || 'info'](`${displayName(record.manifest)}: ${params.text}`);\n break;\n case 'ui:badge':\n record.badge = params.text; this.onChange();\n break;\n }\n }\n\n // --- addressing ------------------------------------------------------------\n\n /**\n * Resolve a command reference from inside a plugin frame. A plugin names its OWN\n * commands by their short contribution name (that's the only name it knows); anything\n * else must be a full address — a built-in like `explorer.download`, or another\n * plugin's contribution URI.\n */\n #resolveCommand(record, id) {\n if (!id || parseContribUri(id)) return id;\n const own = this.platform.contributions.get(contribUri(record.manifest, id));\n return own?.type === 'command' ? own.uri : id;\n }\n\n /**\n * The plugin's own contribution called `name`, of the expected type. Anything else —\n * a name it never declared, or one of the wrong type — is refused: a plugin drives\n * only slots the user saw and approved at install.\n */\n #ownContribution(record, name, type) {\n const c = name ? this.platform.contributions.get(contribUri(record.manifest, name)) : null;\n if (!c || c.pluginId !== record.id || c.type !== type) {\n throw new Error(`\"${name}\" is not a ${type} declared by this plugin`);\n }\n return c;\n }\n\n // --- brokered capabilities -------------------------------------------------\n\n /**\n * Perform a network request on a plugin's behalf, but only to a URL it declared\n * in its manifest `network` allowlist. The request runs from the host with\n * credentials omitted (no ambient cookies/auth), and any redirect that lands\n * off the allowlist is rejected.\n */\n /** blob:/data: carry their own bytes; anything else must be a declared endpoint. */\n #artworkAllowed(record, src) {\n if (!src) return false;\n if (/^(blob:|data:image\\/)/i.test(src)) return true;\n return isAllowedUrl(networkEndpoints(record.manifest), src);\n }\n\n async #brokerFetch(record, { url, method = 'GET', headers, body }) {\n const allow = networkEndpoints(record.manifest);\n // The drive itself is never a \"network endpoint\".\n //\n // The broker runs in the HOST page, which is same-origin with the API. A manifest\n // declaring `network: [\"https://*.com/\"]` matches essentially any drive host, so a\n // plugin approved only for \"connect to the internet\" could call /api/items,\n // /api/items/delete, and other plugins' /api/plugins/:id/sql directly — collecting\n // the whole `files` capability, the per-command grant system, and every other\n // plugin's server-side store in one hop, none of which the user approved. Those\n // routes have a legitimate caller: the host, through the capability-gated methods\n // above.\n if (sameOrigin(url, this.platform.api?.baseUrl)) {\n throw new Error('Blocked: a plugin may not call the drive\\'s own API through the network broker');\n }\n if (!isAllowedUrl(allow, url)) {\n throw new Error(`Blocked: \"${url}\" is not one of this plugin's declared network endpoints`);\n }\n const init = { method, credentials: 'omit', redirect: 'follow', headers: sanitizeHeaders(headers) };\n if (body != null && method !== 'GET' && method !== 'HEAD') {\n init.body = body instanceof ArrayBuffer ? new Uint8Array(body) : body;\n }\n const res = await fetch(url, init);\n // A redirect chain must not escape the declared endpoints — nor land back on the\n // drive, which a declared endpoint is free to redirect to.\n if (res.url && res.url !== url) {\n if (sameOrigin(res.url, this.platform.api?.baseUrl)) {\n throw new Error('Blocked: request redirected onto the drive\\'s own API');\n }\n if (!isAllowedUrl(allow, res.url)) {\n throw new Error(`Blocked: request redirected off this plugin's declared endpoints (${res.url})`);\n }\n }\n const buf = await readCappedBody(res, MAX_FETCH_BYTES);\n const outHeaders = {};\n res.headers.forEach((v, k) => { outHeaders[k] = v; });\n return { ok: res.ok, status: res.status, statusText: res.statusText, url: res.url, headers: outHeaders, bytes: buf };\n }\n\n /**\n * Plugin storage: run a SQL op against one scoped, isolated database. `scope` is\n * 'plugin' or 'domain' (each granted separately); `side` is 'server' or 'client'.\n */\n async #pluginSql(record, { scope = 'plugin', side = 'server', op, sql, params = [], statements }) {\n if (!record.storage?.[scope]) {\n throw new Error(`Storage scope \"${scope}\" not granted${scope === 'domain' ? ' (needs a verified domain)' : ''}`);\n }\n if (side === 'client') {\n // On-device: an isolated wasm SQLite db per scope, held by the host. Domain\n // scope keys by the verified domain so a vendor's plugins share it.\n //\n // Same guard as the server path. The client dbs share ONE emscripten module\n // across every scope, so ATTACH / VACUUM INTO / PRAGMA are an isolation escape\n // here for the same reason they are on disk — the blast radius is the browser's\n // in-memory filesystem rather than the host's, which makes it smaller, not fine.\n if (op === 'batch') for (const s of (Array.isArray(statements) ? statements : [])) assertSafePluginSql(s?.sql);\n else assertSafePluginSql(sql);\n const key = scope === 'domain' ? `dom:${record.manifest.domain}` : `plg:${record.id}`;\n const db = await this.clientDb.obtain(key);\n return runSqlOp(db, op, sql, params, statements);\n }\n // Server: the host proxies to the scoped db over the authenticated API; the\n // domain (for the shared scope) comes from the verified install record, never\n // the plugin.\n const body = { scope, op, sql, params, statements, domain: scope === 'domain' ? record.manifest.domain : undefined };\n const res = await this.platform.api.request('POST', `/api/plugins/${encodeURIComponent(record.id)}/sql`, { body });\n return res.result;\n }\n}\n\n/**\n * Is `url` on the drive's own origin?\n *\n * `baseUrl` is '' in the shipped app (the API is served from the same origin as the\n * page), so the comparison is against `location.origin`; a library caller pointing the\n * client at another host gets that one. A redirect is checked separately, on the way\n * back, since a declared endpoint could redirect here.\n */\nfunction sameOrigin(url, baseUrl) {\n try {\n const here = new URL(baseUrl || '', globalThis.location?.href || 'http://localhost/');\n return new URL(url, here).origin === here.origin;\n } catch {\n return false;\n }\n}\n\n/** True for files a plugin can read as opaque resources (not code, not manifest). */\nfunction isResourcePath(path) {\n return path !== 'manifest.json' && !isSourceModule(path);\n}\n\n// Drop headers the plugin isn't allowed to set (the browser forbids most of these\n// anyway; we strip explicitly so intent is clear and cookies never ride along).\nconst FORBIDDEN_HEADERS = new Set(['host', 'cookie', 'cookie2', 'set-cookie', 'origin', 'referer', 'content-length', 'connection']);\nfunction sanitizeHeaders(headers) {\n const out = {};\n for (const [k, v] of Object.entries(headers || {})) {\n if (!FORBIDDEN_HEADERS.has(String(k).toLowerCase())) out[k] = v;\n }\n return out;\n}\n\n// Dispatch one SQL op onto a SqliteDatabase-shaped handle (the client store; the\n// server mirrors this in routes.js).\nfunction runSqlOp(db, op, sql, params = [], statements) {\n switch (op) {\n case 'exec': return db.exec(sql);\n case 'run': return db.run(sql, ...params);\n case 'get': return db.get(sql, ...params);\n case 'all': return db.all(sql, ...params);\n case 'batch': return db.batch(statements);\n default: throw new Error(`Unknown storage op \"${op}\"`);\n }\n}\n",
|
|
59
59
|
"// Server-side plugin package parsing. The server independently re-parses an uploaded\n// package (never trusting the client that produced it), pulling out the manifest, the\n// verified identity, the declared capabilities and contributions, and a content digest\n// used for dedupe/integrity.\n\nimport { unzipSync, strFromU8 } from 'fflate';\nimport { TroveError } from '../errors.js';\nimport { assertIdentity, pluginId } from './identity.js';\nimport { declaredContributions, serverIndexers, declaredOpeners } from './contributions.js';\n\nexport const ALL_CAPABILITIES = ['files', 'storage', 'ui', 'commands', 'indexer', 'opener', 'network', 'media', 'dock'];\n\nexport { serverIndexers, declaredOpeners, declaredContributions };\n\n/** SHA-256 hex digest of the raw package bytes (content address). */\nexport async function digestBytes(bytes) {\n const buf = await crypto.subtle.digest('SHA-256', bytes);\n return 'sha256:' + [...new Uint8Array(buf)].map((b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/** Declared capability ids from a manifest (object `{cap: opts}` or array form). */\nexport function capabilityList(manifest) {\n const caps = manifest && manifest.capabilities;\n if (Array.isArray(caps)) return caps.filter(Boolean);\n if (caps && typeof caps === 'object') {\n return Object.entries(caps).filter(([, v]) => v !== false && v != null).map(([k]) => k);\n }\n return [];\n}\n\n/** Whether the granted storage includes the shared `domain` scope. */\nexport function usesSharedStorage(manifest) {\n const opt = manifest?.capabilities?.storage;\n return !!(opt && typeof opt === 'object' && opt.domain);\n}\n\n// A package's COMPRESSED size is capped at the route; its INFLATED size was not, and a\n// zip will happily turn 1 MB into 1 GB. `unzipSync` is synchronous, so that is a\n// gigabyte of RSS and thirteen seconds of blocked event loop for one request — from an\n// unauthenticated caller on the zero-config drive, since the install route only asks for\n// a principal and the shared anonymous one satisfies it.\n//\n// fflate's `filter` runs against the central directory BEFORE any entry is inflated, so\n// the declared sizes are the cheapest possible place to refuse. 64 MiB and 2,000 files\n// are far beyond any real plugin (the largest thing in one is a wasm blob) and far below\n// what hurts.\nconst MAX_INFLATED_BYTES = 64 * 1024 * 1024;\nconst MAX_ENTRIES = 2000;\n\nexport function boundedUnzip(bytes) {\n let total = 0;\n let count = 0;\n try {\n return unzipSync(bytes, {\n filter(file) {\n if (++count > MAX_ENTRIES) throw TroveError.tooLarge(`Package has more than ${MAX_ENTRIES} files`);\n total += file.originalSize || 0;\n if (total > MAX_INFLATED_BYTES) {\n throw TroveError.tooLarge(`Package expands to more than ${Math.round(MAX_INFLATED_BYTES / 1024 / 1024)} MB`);\n }\n return true;\n },\n });\n } catch (err) {\n if (err instanceof TroveError) throw err;\n throw TroveError.invalid('Package is not a valid zip', { cause: err });\n }\n}\n\n/**\n * Parse an uploaded package zip. Returns { manifest, pluginId, files, capabilities,\n * contributions, indexers, openers, digest }. Throws INVALID on a missing/malformed\n * manifest, an unverifiable identity, or a bad contribution declaration.\n * @param {Uint8Array} bytes\n */\nexport async function parsePluginPackage(bytes) {\n const files = boundedUnzip(bytes);\n const manifestRaw = files['manifest.json'];\n if (!manifestRaw) throw TroveError.invalid('Package is missing manifest.json');\n let manifest;\n try {\n manifest = JSON.parse(strFromU8(manifestRaw));\n } catch (err) {\n throw TroveError.invalid('manifest.json is not valid JSON', { cause: err });\n }\n // Identity first: everything else (contribution URIs, install records, storage\n // scopes) is addressed under `<domain>/<name>`, so an anonymous package has no\n // address space to live in and is rejected outright.\n assertIdentity(manifest);\n const capabilities = capabilityList(manifest).filter((c) => ALL_CAPABILITIES.includes(c));\n return {\n manifest,\n pluginId: pluginId(manifest),\n files,\n capabilities,\n contributions: declaredContributions(manifest),\n indexers: serverIndexers(manifest),\n openers: declaredOpeners(manifest),\n sharedStorage: usesSharedStorage(manifest),\n digest: await digestBytes(bytes),\n };\n}\n",
|
|
60
60
|
"// PluginHost — the plugin lifecycle orchestrator. It owns the set of installed\n// plugins and their runtime records, and composes four focused collaborators:\n//\n// FrameManager (pluginFrames.js) — sandboxed iframe spawn/handshake/destroy\n// PluginRpcRouter (pluginRpc.js) — the trusted boundary: capability-gated RPC\n// FrameDock (pluginDock.js) — where a frame is shown; the floating dock\n// MediaController (pluginMedia.js) — navigator.mediaSession bridging\n//\n// What stays here is the lifecycle proper: install/restore/reconcile/uninstall, the\n// availability heartbeat, and mounting a plugin into a panel or viewer.\n//\n// A plugin's code runs inside a sandboxed iframe on an OPAQUE origin: it can't touch\n// the host DOM, read cookies/storage, or fetch its own package files. Everything it\n// can do flows over one transferred MessagePort, gated by the capabilities the user\n// granted at install time. Plugins are persisted (PluginRegistry, IndexedDB) so they\n// survive reloads, and re-announce a live capability manifest so the workbench knows\n// what works right now (incl. offline). See pluginPackage.js / pluginSigning.js for\n// install-time validation and the domain-verified trust signal.\n\nimport { zipSync } from 'fflate';\nimport { PluginRegistry } from './pluginStore.js';\nimport { ClientSqlProvider } from './pluginClientDb.js';\nimport { assessTrust } from './pluginSigning.js';\nimport { ADMIN_ONLY_CAPS, capabilityList, networkEndpoints, grantedStorageScopes, parsePackage, displayName, canExecuteCommand } from './pluginPackage.js';\nimport { declaredContributions, parseKeymap, serverIndexers } from '@3sln/trove/core/plugins/contributions.js';\nimport { pluginId, contribUri } from '@3sln/trove/core/plugins/identity.js';\nimport { endpointSummary } from './pluginNet.js';\nimport { MediaController } from './pluginMedia.js';\nimport { FrameDock } from './pluginDock.js';\nimport { InvokePluginCommandAction, OpenInPanelAction } from '../bl/actions.js';\nimport { FrameManager } from './pluginFrames.js';\nimport { PluginRpcRouter } from './pluginRpc.js';\n// The canonical capability list lives in core (the server's authority); import it so\n// client and server can't drift when a capability is added.\nimport { ALL_CAPABILITIES } from '@3sln/trove/core/plugins/package.js';\n\nexport class PluginHost {\n constructor(platform, { heartbeatMs = 20000 } = {}) {\n this.platform = platform;\n this.plugins = new Map(); // id -> runtime record\n this.registry = new PluginRegistry();\n // On-device per-scope SQLite (wasm). A failed background persist is data a plugin\n // already believes it saved, so it surfaces rather than disappearing into a log.\n this.clientDb = new ClientSqlProvider({\n onError: (err, key) => this.platform.notifications.error(`A plugin's on-device data couldn't be saved (${key}): ${err.message}`),\n });\n this.online = typeof navigator !== 'undefined' ? navigator.onLine : true;\n this.heartbeatMs = heartbeatMs;\n this._heartbeat = null;\n this._probing = false;\n this.cell = platform.reactive.cell([]);\n\n // Collaborators. The dock destroys frames through the frame manager (assigned\n // just below — the callback is lazy), and both are consulted on frame teardown.\n this.media = new MediaController();\n this.dock = new FrameDock({\n destroyFrame: (frame) => this.frames.destroy(frame),\n // Dispatched, not called: opening a file from a docked plugin frame is the same\n // intent as opening one from the drive, and the engine should see both.\n // Not `dispatch?.()`. An unwired seam here silently drops a docked frame's\n // open-file, which is exactly the shape server/src/index.js records as having turned\n // a sweep into a permanent no-op.\n openFile: (node, openerId) => this.platform.dispatch(new OpenInPanelAction(node, openerId)),\n onChange: () => this.#emit(),\n });\n this.frames = new FrameManager({ media: this.media, dock: this.dock });\n this.rpc = new PluginRpcRouter({\n platform, clientDb: this.clientDb, media: this.media, dock: this.dock,\n onChange: () => this.#emit(),\n });\n }\n\n observe() {\n return this.cell;\n }\n #emit() {\n this.cell.setValue(this.list());\n }\n\n /**\n * Spawn one sandboxed frame for `record`, wired to this host's RPC router.\n * `entry` boots a different module of the plugin's tree (that's what an opener is).\n */\n #spawnFrame(record, role, entry) {\n return this.frames.spawn(record, role, {\n onCall: (rec, m, p, f) => this.rpc.hostCall(rec, m, p, f),\n onEvent: (rec, m, p, f) => this.rpc.hostEvent(rec, m, p, f),\n online: this.online,\n entry,\n });\n }\n\n /**\n * Register everything the MANIFEST declares, each at its own contribution URI. The\n * manifest is authoritative — this runs before the plugin boots, so: the user's\n * install-time review matches exactly what gets registered, openers/indexers exist\n * without activating the plugin, and they survive a plugin whose primary frame is\n * broken or unresponsive. Nothing a plugin does at runtime can add a contribution;\n * it can only drive the ones declared here (push status content, set a register).\n */\n #registerContributions(runtime) {\n const pid = runtime.id;\n const reg = this.platform.contributions;\n const keep = (dispose) => runtime.disposers.push(dispose);\n const label = displayName(runtime.manifest);\n\n for (const c of declaredContributions(runtime.manifest)) {\n const base = { ...c, pluginId: pid };\n switch (c.type) {\n // A viewer: `entry` names the module that renders it, in its own frame.\n // Skipped entirely if the user declined \"provides viewers\" at install.\n case 'opener':\n if (runtime.grants.includes('opener')) keep(reg.register(c.uri, base));\n break;\n\n // Declared, implemented by the plugin's primary frame. Addressed over RPC by the\n // contribution's short NAME — inside its own frame a plugin addresses its commands\n // by name, not by URI.\n case 'command':\n keep(this.platform.commands.register({\n id: c.uri, title: c.title || `${label}: ${c.name}`,\n category: c.category || label, icon: c.icon,\n when: c.when, offline: c.offline, palette: c.palette, pluginId: pid,\n // A description, like every other command. It used to be a closure over\n // `runtime` proxying straight to the channel, which left a plugin command\n // running invisible to the engine — the same hole ExecCommandAction closed for\n // the host's own commands, still open for everyone else's.\n actions: (...args) => new InvokePluginCommandAction(pid, c.name, args),\n }));\n break;\n\n // A slot in the status bar, empty and hidden until the plugin pushes content.\n // A CLICKABLE one is the plugin asking the host to run something — the same ask\n // a keyboard shortcut makes — so it goes through the same per-command grant.\n // Without this, a manifest holding only the `ui` capability could put an\n // inviting button in the status bar wired to `explorer.delete` or\n // `plugins.installFromUrl`, and the install review never mentioned the field.\n case 'statusItem': {\n const command = c.command\n ? this.#resolveCommand(runtime, c.command, label, `status item “${c.name}”`)\n : null;\n keep(reg.register(c.uri, { ...base, command, html: '', visible: false }));\n break;\n }\n\n // A context value slot — the one kind of key that genuinely is PUSHED rather than\n // derived, because only the plugin knows what it means. Owned here, on the\n // plugin's behalf: the registry hands back a writer, which goes on the runtime\n // record so `context:setRegister` can reach it and nothing else can.\n //\n // Seeded with its declared default so when-clauses referencing it evaluate\n // sensibly before the plugin has run at all.\n case 'register': {\n keep(reg.register(c.uri, base));\n const owned = this.platform.context.own(c.uri, c.default);\n runtime.registers.set(c.uri, owned.set);\n keep(() => { runtime.registers.delete(c.uri); owned.dispose(); });\n break;\n }\n\n // A keymap JSON file inside the package. Read + validated here, at register\n // time, so a malformed keymap is a visible install-time problem rather than a\n // shortcut that silently never fires.\n case 'keymap': {\n const bytes = runtime.files.get(c.path);\n if (!bytes) {\n this.platform.notifications.warn(`Plugin \"${label}\": keymap file \"${c.path}\" is not in the package.`);\n break;\n }\n try {\n const bindings = this.#resolveBindings(runtime, parseKeymap(new TextDecoder().decode(bytes)), label);\n keep(reg.register(c.uri, { ...base, bindings }));\n } catch (err) {\n this.platform.notifications.warn(`Plugin \"${label}\": ${err.message}`);\n }\n break;\n }\n\n // Indexers are deliberately NOT registered client-side. They run on the server\n // (PluginIndexers registers them from the install record), because indexing\n // must happen once per upload for the drive — not in whichever tab is open.\n case 'indexer':\n break;\n }\n }\n }\n\n /**\n * Resolve a keymap's bindings into real addresses, and refuse the ones the plugin\n * isn't allowed to trigger. A binding naming one of the plugin's own commands is\n * rewritten to that contribution's URI (inside its package a plugin knows only short\n * names); anything else is a foreign address and must be in the manifest's `commands`\n * allowlist — a shortcut is still the plugin asking the host to run something, so it\n * can't be a way around the per-command grant the user approved.\n */\n #resolveBindings(runtime, bindings, label) {\n const out = [];\n for (const b of bindings) {\n const command = this.#resolveCommand(runtime, b.command, label, `shortcut ${b.key}`);\n if (command) out.push({ ...b, command });\n }\n return out;\n }\n\n /**\n * One command address the plugin wants to be able to trigger, resolved and checked.\n *\n * A short name is one of the plugin's own commands and becomes its contribution URI.\n * Anything else is a FOREIGN address and must appear in the manifest's `commands`\n * allowlist. Returns null (with a warning naming `what`) when it isn't allowed, so\n * every route by which a plugin can ask the host to run something — keymaps, status\n * items — passes through the same grant the user actually approved.\n */\n #resolveCommand(runtime, wanted, label, what) {\n const uri = contribUri(runtime.manifest, wanted);\n const own = declaredContributions(runtime.manifest).some((c) => c.uri === uri && c.type === 'command');\n if (own) return uri;\n if (!canExecuteCommand(runtime.manifest, wanted)) {\n this.platform.notifications.warn(`Plugin \"${label}\": ${what} runs \"${wanted}\", which it isn't allowed to run — ignored.`);\n return null;\n }\n return wanted;\n }\n\n list() {\n return [...this.plugins.values()].map((p) => ({\n id: p.id, name: displayName(p.manifest), version: p.manifest.version, status: p.status,\n capabilities: p.grants, error: p.error || null, hasUi: p.hasUi, badge: p.badge || null,\n trust: p.trust || null, settingsSchema: p.manifest.settings || [],\n endpoints: endpointSummary(networkEndpoints(p.manifest)),\n responsive: !!p.responsive, manifest: p.live || null, features: this.#featureList(p),\n }));\n }\n\n /**\n * What this plugin contributes — read from the MANIFEST, so the list is known\n * without the plugin running (and stays accurate if it stops responding). `live`\n * is only used for liveness/availability, not for what exists.\n */\n #featureList(record) {\n let declared;\n try { declared = declaredContributions(record.manifest); } catch { return []; }\n return declared.map((c) => ({\n kind: c.type, id: c.uri, name: c.name, title: c.title || c.name,\n offline: !!c.offline, available: this.#availableSpec(record, c),\n }));\n }\n #availableSpec(record, spec) {\n if (record.status !== 'active' || !record.responsive) return false;\n return this.online || !!spec.offline;\n }\n isAvailable(contrib) {\n if (!contrib?.pluginId) return true;\n const record = this.plugins.get(contrib.pluginId);\n if (!record) return false;\n return this.#availableSpec(record, contrib);\n }\n\n // --- install / restore -----------------------------------------------------\n\n /** Whether the current user may grant a capability (some need admin). */\n canGrant(cap, isAdmin) {\n return !ADMIN_ONLY_CAPS.has(cap) || !!isAdmin;\n }\n\n /**\n * Install a parsed package. `grants` is the subset of requested capabilities\n * the user approved (the review UI filters admin-only caps for non-admins).\n */\n async install(pkg, { grants, trust } = {}) {\n const id = pluginId(pkg.manifest);\n const requested = capabilityList(pkg.manifest);\n const granted = (grants || requested).filter((c) => ALL_CAPABILITIES.includes(c) && requested.includes(c));\n // Account-scoped plugins (server storage or a server indexer) upload their full\n // package to the server: it re-validates, gates admin-only packages, and becomes\n // the canonical copy so the plugin syncs to the user's other devices and its\n // capabilities are enforced server-side. Throws if the server rejects (e.g. admin\n // required) — surfaced to the user by the install UI. Device-scoped plugins stay local.\n const scope = accountScoped(pkg.manifest, granted) ? 'account' : 'device';\n if (scope === 'account') {\n if (!pkg.raw) throw new Error('Package bytes unavailable for a server install');\n await this.platform.api.installPlugin(pkg.raw, granted);\n }\n const storage = granted.includes('storage')\n ? grantedStorageScopes(pkg.manifest, trust)\n : { plugin: false, domain: false };\n const record = {\n id, manifest: pkg.manifest,\n files: Object.fromEntries([...pkg.files.entries()]),\n grants: granted, storage, trust: trust || null, scope,\n settings: {}, secrets: {}, installedAt: Date.now(),\n };\n await this.registry.save(record);\n this.#registerSettings(record);\n await this.#run(record);\n return this.plugins.get(id);\n }\n\n /** Load all persisted plugins (call once at startup), then sync account plugins. */\n async restore() {\n let records = [];\n try {\n records = await this.registry.list();\n } catch { /* no IndexedDB */ }\n for (const rec of records) {\n // A single corrupt persisted record (missing manifest, etc.) must not abort the\n // restore of every other plugin — guard per record.\n try {\n this.#registerSettings(rec);\n this.#run(rec).catch((e) => console.error('restore plugin failed', rec.id, e));\n } catch (e) {\n console.error('skipping corrupt plugin record', rec?.id, e);\n this.platform.notifications.warn(`Couldn't restore plugin \"${rec?.manifest ? displayName(rec.manifest) : rec?.id || 'unknown'}\" — its saved data looks corrupt.`);\n }\n }\n // Reconcile with the server's account plugins (best-effort, offline-tolerant).\n this.#reconcile(records).catch(() => {});\n }\n\n // Two-way sync of account plugins with the server: push any local account plugin the\n // server is missing (migration for pre-existing local installs), and pull any server\n // account plugin not yet on this device (cross-device sync).\n async #reconcile(localRecords) {\n let serverList;\n try { serverList = (await this.platform.api.installedPlugins()).plugins || []; } catch { return; }\n const serverIds = new Set(serverList.map((p) => p.pluginId));\n const localIds = new Set(localRecords.map((r) => r.id));\n let pushFailures = 0;\n let pulled = 0;\n let pullFailures = 0;\n\n // Push: local account plugins the server doesn't have → re-upload (re-zipped).\n for (const rec of localRecords) {\n if (rec.scope !== 'account' || serverIds.has(rec.id)) continue;\n try {\n await this.platform.api.installPlugin(zipSync(toU8Files(rec.files)), rec.grants || []);\n } catch (e) { console.error('re-upload plugin failed', rec.id, e); pushFailures++; }\n }\n\n // Pull: server account plugins not on this device → download + enable.\n for (const rec of serverList) {\n if (localIds.has(rec.pluginId)) continue;\n try {\n const pkg = parsePackage(await this.platform.api.pluginPackage(rec.pluginId));\n const grants = rec.grants || [];\n const record = {\n id: rec.pluginId, manifest: pkg.manifest,\n files: Object.fromEntries([...pkg.files.entries()]),\n grants,\n // The SHARED domain scope comes from the server's install record, not from\n // the package's own manifest. The install path gates it on verified domain\n // ownership (`grantedStorageScopes` requires trust.status === 'verified') and\n // the review UI shows it as blocked; this sync path set `trust: null` and read\n // the self-declared manifest — so a package refused the shared store on the\n // device it was installed on got it on the next device that synced.\n storage: grants.includes('storage')\n ? { plugin: true, domain: !!rec.sharedStorage }\n : { plugin: false, domain: false },\n trust: null, scope: 'account',\n settings: {}, secrets: {}, installedAt: rec.createdAt || Date.now(),\n };\n await this.registry.save(record);\n this.#registerSettings(record);\n await this.#run(record);\n pulled++;\n } catch (e) { console.error('sync plugin failed', rec.pluginId, e); pullFailures++; }\n }\n\n if (pulled) this.platform.notifications.info(`Synced ${pulled} account plugin${pulled > 1 ? 's' : ''} from the server.`);\n if (pushFailures || pullFailures) {\n const parts = [];\n if (pullFailures) parts.push(`${pullFailures} couldn't be downloaded`);\n if (pushFailures) parts.push(`${pushFailures} couldn't be uploaded`);\n this.platform.notifications.warn(`Some account plugins didn't sync: ${parts.join(', ')}.`);\n }\n }\n\n #registerSettings(record) {\n const schema = (record.manifest.settings || []).filter((s) => !s.secret);\n if (schema.length) {\n record._settingsDispose = this.platform.settings.scopedFor(record.id).register(\n schema.map((s) => ({ ...s, category: displayName(record.manifest) })),\n );\n }\n }\n\n // --- run (create the plugin's primary sandboxed iframe) --------------------\n\n async #run(record) {\n if (this.plugins.get(record.id)?.status === 'active') return;\n const runtime = {\n ...record, iframe: null, status: 'loading', error: null, disposers: [], channel: null,\n // Writers for the context registers this plugin DECLARED, keyed by contribution URI.\n // Holding them here is what makes \"a plugin may only set its own registers\" structural\n // rather than a check: there is no setter for a key it did not declare.\n registers: new Map(),\n hasUi: false, responsive: false, frame: null, frames: new Set(),\n // Storage scopes (defaulted for records saved before this field existed).\n storage: record.storage || (record.grants?.includes('storage') ? grantedStorageScopes(record.manifest, record.trust) : { plugin: false, domain: false }),\n files: mapFromFiles(record.files),\n };\n this.plugins.set(record.id, runtime);\n // Register declared contributions BEFORE booting — they don't depend on the\n // plugin running, and this keeps them alive if its frame never comes up.\n try { this.#registerContributions(runtime); } catch (e) { console.error('registering contributions failed', record.id, e); }\n this.#emit();\n\n try {\n // The primary (background) frame: registers commands/indexers, does one-time\n // setup. Its channel is the record's channel used for probes and commands.\n const frame = await this.#spawnFrame(runtime, 'primary');\n // Uninstalled while the handshake was in flight? The record is no longer in the\n // map — tear this frame down instead of leaving a live, unreachable iframe.\n if (this.plugins.get(record.id) !== runtime) { this.frames.destroy(frame); return runtime; }\n runtime.frame = frame;\n runtime.iframe = frame.iframe;\n runtime.channel = frame.channel;\n runtime.status = 'active';\n runtime.responsive = true;\n this.#probe(runtime).then(() => this.#emit());\n this.#startHeartbeat();\n } catch (err) {\n runtime.status = 'error';\n runtime.error = err?.message || String(err);\n this.platform.notifications.error(`Plugin \"${displayName(record.manifest)}\" failed to load: ${runtime.error}`);\n }\n this.#emit();\n return runtime;\n }\n\n // --- settings & secrets (host-side, for the UI) ----------------------------\n\n async setSecret(pluginId, key, value) {\n const rec = await this.registry.get(pluginId);\n if (!rec) return;\n rec.secrets = { ...rec.secrets, [key]: value };\n await this.registry.save(rec);\n const runtime = this.plugins.get(pluginId);\n if (runtime) runtime.secrets = rec.secrets;\n runtime?.channel?.emit('settings:changed', { key, value: '••••' });\n }\n async getSecret(pluginId, key) {\n const rec = await this.registry.get(pluginId);\n return rec?.secrets?.[key] ?? '';\n }\n\n // --- heartbeat / availability ----------------------------------------------\n\n #startHeartbeat() {\n if (this._heartbeat || !this.heartbeatMs) return;\n this._heartbeat = setInterval(() => this.#heartbeat(), this.heartbeatMs);\n if (this._heartbeat?.unref) this._heartbeat.unref();\n }\n #stopHeartbeat() {\n if (this._heartbeat) clearInterval(this._heartbeat);\n this._heartbeat = null;\n }\n async #heartbeat() {\n if (this._probing) return;\n this._probing = true;\n try {\n let changed = false;\n for (const r of this.plugins.values()) if (r.status === 'active') changed = (await this.#probe(r)) || changed;\n if (changed) this.#emit();\n } finally {\n this._probing = false;\n }\n }\n /**\n * Run one of a plugin's own commands, in its frame.\n *\n * Public because `InvokePluginCommandAction` is what reaches it now, rather than a closure\n * captured at registration. Addressed by short NAME: the URI is the host's way of keeping\n * two plugins' `status` commands apart and means nothing on the other side.\n *\n * A plugin that is not running answers undefined rather than throwing. Its commands are\n * already filtered out of the palette by `isAvailable`, so getting here at all means a\n * stale reference, which is not worth an error.\n */\n invokeCommand(pluginId, name, args = []) {\n return this.plugins.get(pluginId)?.channel?.call('command:execute', { id: name, args });\n }\n\n setHeartbeat(ms) {\n this.heartbeatMs = ms;\n this.#stopHeartbeat();\n if (ms && [...this.plugins.values()].some((r) => r.status === 'active')) this.#startHeartbeat();\n }\n async #probe(record) {\n if (record.status !== 'active' || !record.channel) return false;\n const before = { responsive: record.responsive, sig: signature(record.live) };\n try {\n record.live = await record.channel.call('manifest', {}, { timeout: 4000 });\n record.responsive = true;\n } catch {\n record.responsive = false;\n }\n return before.responsive !== record.responsive || before.sig !== signature(record.live);\n }\n async setOnline(online) {\n if (this.online === online) return;\n this.online = online;\n await Promise.all([...this.plugins.values()].filter((r) => r.status === 'active').map(async (r) => {\n try { r.channel?.emit('connectivity', { online }); } catch { /* ignore */ }\n for (const frame of r.frames || []) { try { frame.channel?.emit('connectivity', { online }); } catch { /* ignore */ } }\n await this.#probe(r);\n }));\n this.#emit();\n }\n async refresh(pluginId) {\n const record = this.plugins.get(pluginId);\n if (record) { await this.#probe(record); this.#emit(); }\n }\n\n // --- mounting (panel / viewer) ---------------------------------------------\n //\n // Where a frame is *shown* is FrameDock's job (position:fixed overlay tracking a\n // target element — we never re-parent an iframe, which would reload it). These\n // methods own the mount lifecycle: which frame, opened with what, and what happens\n // when it detaches.\n\n mountPanel(pluginId, container, { width = 380, height = 480 } = {}) {\n const record = this.plugins.get(pluginId);\n if (!record?.frame) return null;\n container.style.width = `${width}px`;\n container.style.height = `${height}px`;\n this.dock.place(record.frame, container, 50);\n record.hasUi = true;\n return () => this.dock.hide(record.frame);\n }\n\n /**\n * Mount a plugin opener as the viewer for `node`. Each viewer runs in its OWN\n * sandboxed iframe (spawned with the plugin's capabilities), so viewers are\n * isolated from the background instance and from each other. Returns a detach fn:\n * if the viewer registered `dock`, its frame is kept alive as a floating dock,\n * otherwise it is destroyed.\n */\n mountViewer(pluginId, container, node, openerId, hooks = {}) {\n const record = this.plugins.get(pluginId);\n if (!record) { hooks.onError?.('Plugin is not available'); return null; }\n\n // Re-adopt the docked frame if it's the same file — preserves live playback\n // (the docked <video>/<audio> keeps running) instead of spawning a fresh viewer.\n const docked = this.dock.docked;\n if (docked && docked.record === record && docked.node?.id === node.id && docked.openerId === openerId) {\n this.dock.undock(docked);\n this.dock.place(docked, container, 3);\n hooks.onReady?.();\n return () => this.#detachViewer(docked);\n }\n\n // Boot the frame at the OPENER's entry module — not the plugin's main entry, so a\n // viewer loads only the code it needs and never re-runs the plugin's background setup.\n const opener = this.platform.contributions.get(openerId);\n const mount = { cancelled: false, frame: null };\n this.#spawnFrame(record, 'viewer', opener?.entry).then(async (frame) => {\n if (mount.cancelled) { this.frames.destroy(frame); return; }\n mount.frame = frame;\n frame.node = node;\n frame.openerId = openerId;\n record.frames.add(frame);\n this.dock.place(frame, container, 3);\n try {\n await frame.channel?.call('opener:open', { openerId, file: node, context: {} });\n if (!mount.cancelled) hooks.onReady?.();\n } catch (err) {\n if (!mount.cancelled) hooks.onError?.(err?.message || 'Failed to open');\n }\n }).catch((e) => {\n console.error('viewer frame failed to load', e);\n if (!mount.cancelled) hooks.onError?.(e?.message || 'This viewer failed to load');\n });\n record.hasUi = true;\n\n return () => {\n mount.cancelled = true;\n if (mount.frame) this.#detachViewer(mount.frame);\n };\n }\n\n // A viewer went off-screen: dock it (if it opted in and isn't dismissed) or destroy it.\n #detachViewer(frame) {\n if (frame.dock?.enabled && !frame.dock.dismissed) this.dock.dock(frame);\n else this.frames.destroy(frame);\n }\n\n // --- uninstall --------------------------------------------------------------\n\n /** Uninstall: stop the plugin, forget it, and wipe everything it owns. */\n async uninstall(pluginId, { wipeData = true } = {}) {\n const record = this.plugins.get(pluginId);\n const name = record?.manifest ? displayName(record.manifest) : pluginId;\n const isAccount = record?.scope === 'account'\n || (await this.registry.get(pluginId).catch(() => null))?.scope === 'account';\n\n // Account plugins: the server holds the canonical copy. Remove it there FIRST — if\n // that fails we must NOT tear down locally, or the plugin silently resurrects on the\n // next reload (server still lists it) with no sign anything went wrong.\n if (wipeData && isAccount) {\n try {\n await this.platform.api.uninstallPluginServer(pluginId);\n } catch (err) {\n this.platform.notifications.error(`Couldn't uninstall \"${name}\" from the server: ${err.message}. It's still installed.`);\n return;\n }\n }\n\n if (record) {\n try { record.channel?.emit('deactivate'); } catch { /* ignore */ }\n for (const d of record.disposers) { try { d(); } catch { /* ignore */ } }\n record._settingsDispose?.();\n for (const frame of [...(record.frames || [])]) this.frames.destroy(frame); // viewer/dock frames\n // The primary frame may have an open panel placement (observers + listeners).\n if (record.frame) { this.dock.stopPlace(record.frame); this.media.releaseActions(record.frame); }\n record.channel?.dispose();\n record.iframe?.remove();\n this.plugins.delete(pluginId);\n }\n // Best-effort cleanup of the plugin's private stores. A failure here doesn't block\n // uninstall, but the user is told so leftover data isn't silently orphaned.\n const wipeFailures = [];\n if (wipeData) {\n if (!isAccount) await this.platform.api.request('DELETE', `/api/plugins/${encodeURIComponent(pluginId)}/data`).catch(() => wipeFailures.push('server-side data'));\n await this.clientDb.drop(`plg:${pluginId}`).catch(() => wipeFailures.push('on-device data'));\n }\n // The persisted record is what restore() reads: if this fails and we say nothing,\n // the plugin silently reappears on the next reload looking like a bug in uninstall.\n let resurrects = false;\n try {\n await this.registry.remove(pluginId);\n } catch (err) {\n resurrects = true;\n console.error('removing the persisted plugin record failed', pluginId, err);\n }\n if (![...this.plugins.values()].some((r) => r.status === 'active')) this.#stopHeartbeat();\n this.#emit();\n if (resurrects) {\n this.platform.notifications.error(`Removed \"${name}\", but its saved record couldn't be deleted — it may come back when you reload.`);\n } else if (wipeFailures.length) {\n this.platform.notifications.warn(`Uninstalled \"${name}\", but couldn't clear its ${wipeFailures.join(' and ')}.`);\n }\n }\n\n // --- trust ------------------------------------------------------------------\n\n /** Fetch a domain's assetlinks doc through the server (avoids CORS). */\n fetchAssetlinks = async (domain) => {\n const res = await this.platform.api.request('GET', '/api/plugins/assetlinks', { query: { domain } });\n return res?.assetlinks || null;\n };\n assessTrust(pkg) {\n return assessTrust(pkg, this.fetchAssetlinks);\n }\n}\n\nfunction mapFromFiles(files) {\n const m = new Map();\n for (const [k, v] of Object.entries(files)) m.set(k, v instanceof Uint8Array ? v : new Uint8Array(v));\n return m;\n}\n\n// Coerce a stored files object (path -> bytes, possibly ArrayBuffer after IndexedDB\n// round-trip) into the { path: Uint8Array } shape fflate's zipSync expects.\nfunction toU8Files(files) {\n const out = {};\n for (const [k, v] of Object.entries(files || {})) out[k] = v instanceof Uint8Array ? v : new Uint8Array(v);\n return out;\n}\n\n// A plugin is account-scoped (must install to the server) if it has a server\n// footprint: server storage, or an indexer (which the SERVER runs). Purely\n// client-side plugins stay device-local.\nfunction accountScoped(manifest, granted) {\n if (granted.includes('storage')) return true;\n return serverIndexers(manifest).length > 0;\n}\n\n// A cheap fingerprint of a plugin's live self-report, used to tell whether a heartbeat\n// changed anything worth re-rendering for.\nfunction signature(live) {\n if (!live) return '';\n return `${live.online ? 1 : 0}|${[...(live.handlers || [])].sort().join(',')}`;\n}\n",
|
|
61
61
|
"// What kind of screen is this, and how is it being driven?\n//\n// The drive runs on three shapes of device that want genuinely different chrome: a\n// desktop with a mouse and a left rail, a phone held in one hand, and a TV across the\n// room driven by a d-pad. This is the one place that decides which, so components ask\n// `state.vp.mode` instead of each inventing its own breakpoint — and so a single\n// override flips the whole shell at once.\n//\n// Detection is a guess, and guesses about TVs are especially bad (a browser on a set-top\n// box reports a large screen and, often, a mouse it does not have). So the guess is only\n// the default: `?ui=phone` in the URL, or the `workbench.layout` setting, wins outright.\n// Someone whose TV we mis-detect can fix it in Settings rather than living with it.\n\nimport { cell, effect } from '../runtime.js';\n\nexport const LAYOUTS = ['auto', 'desktop', 'phone', 'tv'];\n\n// Below this, the left rail plus a panel leaves nothing for the panel.\nconst PHONE_MAX = 720;\n// A TV is a big screen you sit far away from. Only consulted alongside a UA hint —\n// width alone would call every large monitor a television.\nconst TV_MIN = 1100;\nconst TV_UA = /\\b(smart-?tv|smarttv|appletv|googletv|android\\s*tv|hbbtv|netcast|web0s|webos|tizen|viera|bravia|aquos|crkey|nettv|dtv|philipstv|roku|aft[a-z]{1,3})\\b/i;\n\n/** Does the user agent say, unprompted, that it is a television? */\nexport function looksLikeTv(ua = '', width = 0) {\n if (!ua) return false;\n return TV_UA.test(ua) && width >= TV_MIN;\n}\n\nexport class ViewportService {\n #state;\n\n /**\n * @param {object} [deps]\n * @param {Window} [deps.window] the window to measure and listen to\n * @param {import('./settings.js').SettingsService} [deps.settings]\n */\n constructor({ window: win = globalThis, settings = null } = {}) {\n this.window = win;\n this.settings = settings;\n // A URL override outranks the setting: it is how someone checks the phone layout on\n // a laptop, and how the e2e suite drives each shell without a device farm.\n this.urlOverride = readUrlOverride(win);\n this.#state = this.#measure();\n this.cell = cell(this.#state);\n this._onResize = () => this.refresh();\n }\n\n /** The value, for whoever is about to decide something from it. See bl/state.js: one\n * value, one way to read it — a public `state` field is a second, writable door. */\n get() {\n return this.#state;\n }\n\n observe() {\n return this.cell;\n }\n\n /** Start listening. Separate from the constructor so tests can measure without hooks. */\n install() {\n this.window.addEventListener?.('resize', this._onResize);\n this.window.addEventListener?.('orientationchange', this._onResize);\n // `effect` runs now and on every change. The old form was\n // `settings.observe().subscribe?.(…)` — optional-chained, so when `observe()`\n // stopped returning something with `.subscribe` it would have become a silent\n // no-op and the viewport would have stopped following its own setting.\n if (this.settings) effect(this.settings.observe(), () => this.refresh());\n this.#publish(this.#state);\n return this;\n }\n\n dispose() {\n this.window.removeEventListener?.('resize', this._onResize);\n this.window.removeEventListener?.('orientationchange', this._onResize);\n }\n\n refresh() {\n const next = this.#measure();\n const same = next.mode === this.#state.mode && next.width === this.#state.width\n && next.height === this.#state.height && next.coarse === this.#state.coarse;\n if (same) return;\n this.#state = next;\n this.#publish(next);\n this.cell.setValue(next);\n }\n\n #publish(vp) {\n // Context keys so plugin `when` clauses and keybindings can target a form factor\n // the same way they target a view.\n // The root element carries it too, so CSS can respond without every rule needing a\n // media query that would disagree with the JS branch above it.\n const el = this.window.document?.documentElement;\n if (el) el.dataset.layout = vp.mode;\n }\n\n #measure() {\n const win = this.window;\n const width = win.innerWidth || 1280;\n const height = win.innerHeight || 800;\n const coarse = matches(win, '(pointer: coarse)');\n const ua = win.navigator?.userAgent || '';\n const forced = this.urlOverride || this.settings?.get?.('workbench.layout') || 'auto';\n const mode = forced !== 'auto' && LAYOUTS.includes(forced) ? forced : detect({ width, coarse, ua });\n return { mode, width, height, coarse, forced: forced !== 'auto' };\n }\n}\n\nfunction detect({ width, coarse, ua }) {\n if (looksLikeTv(ua, width)) return 'tv';\n // Narrow is a phone whether or not the pointer is coarse — a desktop window dragged\n // small has the same problem a phone does, and the layout that fits one fits the other.\n if (width <= PHONE_MAX) return 'phone';\n return 'desktop';\n}\n\nfunction matches(win, query) {\n try { return !!win.matchMedia?.(query)?.matches; } catch { return false; }\n}\n\nfunction readUrlOverride(win) {\n try {\n const value = new URL(win.location.href).searchParams.get('ui');\n return value && LAYOUTS.includes(value) ? value : null;\n } catch { return null; }\n}\n",
|
|
@@ -63,10 +63,11 @@
|
|
|
63
63
|
"// Dictating into the search box.\n//\n// THE REMOTE'S MIC BUTTON IS NOT OURS. On every TV platform it belongs to the system:\n// webOS's SDK exposes no way for an app to listen to the Magic Remote, Tizen's voice\n// control is a packaged-app API that does not exist for a page in the TV browser, and\n// on Android TV the button raises Assistant. No key event reaches the document, so\n// there is nothing to intercept and no shortcut to bind.\n//\n// What the button DOES do is dictate into a focused text field, through the platform's\n// own keyboard. That is the whole opportunity: the mic is useful exactly when there is\n// somewhere for its text to land. `search.voice` therefore does not try to capture a\n// button — it makes sure the search field is open and focused, so the mic on the remote\n// has a target. That half works on every TV, with no API at all.\n//\n// This module is the OTHER half, for browsers that can transcribe themselves (Chrome,\n// so Android TV and the desktop). It is deliberately narrow:\n//\n// ON-DEVICE ONLY. By default `SpeechRecognition` streams audio to the browser\n// vendor's servers. Trove is a drive you host so that your files stay yours, and\n// shipping a microphone that quietly forwards your voice to a third party would\n// contradict the entire point of it. `processLocally` asks for recognition that never\n// leaves the machine; a browser that cannot promise that is simply reported as\n// unsupported, and the button is never offered.\n\n/**\n * Resolved per call, not captured at import.\n *\n * A module-level constant would freeze the answer at load time, which is wrong twice\n * over: the page may gain the API later (a polyfill, a flag flipped behind a restart),\n * and a test could never stand in for it. Reading it when asked costs a property lookup.\n */\nfunction impl() {\n if (typeof window === 'undefined') return null;\n return window.SpeechRecognition || window.webkitSpeechRecognition || null;\n}\n\n/**\n * Whether this browser can transcribe WITHOUT sending audio anywhere.\n *\n * `available()` is the on-device half of the API; a browser that lacks it has no notion\n * of local recognition, which for us is the same as having no recognition. Detecting\n * the constructor alone would be the bug: every Chrome has that, and most of them would\n * happily record you into a datacentre.\n */\nexport function canTranscribeLocally() {\n const Impl = impl();\n return !!Impl && typeof Impl.available === 'function';\n}\n\nconst optionsFor = (lang) => ({ langs: [lang], processLocally: true });\n\n/**\n * `'available' | 'downloadable' | 'downloading' | 'unavailable'`\n *\n * A language pack that is merely `downloadable` is not usable yet, and downloading one\n * unasked would spend someone's bandwidth on a button they have not pressed.\n */\nexport async function localAvailability(lang = navigator.language || 'en-US') {\n if (!canTranscribeLocally()) return 'unavailable';\n try {\n return await impl().available(optionsFor(lang));\n } catch {\n return 'unavailable';\n }\n}\n\n/** Fetch the on-device language pack. Only ever called from an explicit user action. */\nexport async function installLocal(lang = navigator.language || 'en-US') {\n if (typeof impl()?.install !== 'function') return false;\n try {\n return await impl().install(optionsFor(lang));\n } catch {\n return false;\n }\n}\n\n/**\n * Listen, and report what was heard.\n *\n * `onText(text, { final })` fires for interim results too, so the query updates as\n * someone speaks rather than landing in one lump at the end — on a TV that feedback is\n * the difference between \"it is listening\" and \"did it hear me\".\n *\n * @returns {{stop: () => void}}\n */\nexport function listen({ lang = navigator.language || 'en-US', onText, onEnd, onError } = {}) {\n if (!canTranscribeLocally()) throw new Error('On-device speech recognition is not available here');\n const rec = new (impl())();\n rec.lang = lang;\n rec.interimResults = true;\n rec.continuous = false;\n // Both spellings: `options` is the shape the explainer settled on, and shipping\n // builds also read the flag straight off the instance. Setting one the browser\n // ignores is harmless; setting neither would mean asking for local processing and\n // silently getting the remote kind.\n rec.options = optionsFor(lang);\n rec.processLocally = true;\n\n let stopped = false;\n rec.onresult = (event) => {\n let text = '';\n let final = false;\n for (let i = event.resultIndex; i < event.results.length; i++) {\n text += event.results[i][0].transcript;\n if (event.results[i].isFinal) final = true;\n }\n onText?.(text.trim(), { final });\n };\n // `no-speech` and `aborted` are what happens when someone changes their mind. They\n // are not failures worth a toast.\n rec.onerror = (event) => {\n if (event.error === 'no-speech' || event.error === 'aborted') return;\n onError?.(new Error(event.error || 'Speech recognition failed'));\n };\n rec.onend = () => { if (!stopped) { stopped = true; onEnd?.(); } };\n\n try {\n rec.start();\n } catch (err) {\n stopped = true;\n onError?.(err);\n onEnd?.();\n }\n\n return {\n stop() {\n if (stopped) return;\n stopped = true;\n try { rec.stop(); } catch { /* already finished */ }\n onEnd?.();\n },\n };\n}\n",
|
|
64
64
|
"// The \"speak to search\" surface, and the part of it that works with no API at all.\n//\n// Two jobs, and they are independent on purpose:\n//\n// 1. PUT THE SEARCH FIELD UNDER THE MICROPHONE. A TV remote's mic dictates into\n// whatever text field the platform keyboard is attached to, and does nothing at\n// all when there isn't one. So the command opens the search surface and focuses\n// its input. On webOS and Tizen that is the entire feature — the platform does\n// the listening, the text arrives as ordinary input events, and Trove never asks\n// for a microphone.\n//\n// 2. TRANSCRIBE OURSELVES, where the browser can do it on-device (see voice.js).\n// Additive: if it isn't available the field is still focused and the remote's own\n// mic still works.\n\nimport { cell } from '../runtime.js';\nimport { canTranscribeLocally, localAvailability, installLocal, listen } from './voice.js';\n\nexport class VoiceSearchService {\n #state;\n\n /**\n * @param {object} deps\n * @param {object} deps.notifications\n */\n constructor({ notifications, settings } = {}) {\n this.notifications = notifications;\n this.settings = settings;\n this.session = null;\n this.#state = { supported: canTranscribeLocally(), status: 'unknown', listening: false };\n this.cell = cell(this.#state);\n }\n\n /** The value, for whoever is about to decide something from it. See bl/state.js: one\n * value, one way to read it — a public `state` field is a second, writable door. */\n get() {\n return this.#state;\n }\n\n observe() {\n return this.cell;\n }\n #set(patch) {\n this.#state = { ...this.#state, ...patch };\n this.cell.setValue(this.#state);\n }\n\n /** Ask once whether an on-device language pack is ready, and remember the answer. */\n async refresh() {\n if (!this.#state.supported) return 'unavailable';\n const status = await localAvailability(this.#lang());\n this.#set({ status });\n return status;\n }\n\n #lang() {\n return this.settings?.get?.('search.voiceLanguage') || navigator.language || 'en-US';\n }\n\n /** Can we offer a microphone button right now? */\n canListen() {\n return this.#state.supported && (this.#state.status === 'available' || this.#state.status === 'downloadable');\n }\n\n /**\n * The command behind `search.voice`.\n *\n * `focus` is what makes this worth binding on a TV even when we cannot transcribe:\n * it is the difference between the remote's mic having a target and being swallowed\n * by the platform assistant.\n */\n async run({ onText } = {}) {\n this.openSearchSurface();\n // Focus AFTER the surface has rendered — the input does not exist yet on the frame\n // that opened it.\n await this.focusInput();\n if (!this.#state.supported) return { listening: false, reason: 'unsupported' };\n\n const status = this.#state.status === 'unknown' ? await this.refresh() : this.#state.status;\n if (status === 'downloadable') {\n // Pressing the button IS the consent to fetch it; nothing downloads before that.\n this.notifications?.info('Downloading the on-device voice model — this happens once.');\n const ok = await installLocal(this.#lang());\n this.#set({ status: ok ? 'available' : 'unavailable' });\n if (!ok) return { listening: false, reason: 'install-failed' };\n } else if (status !== 'available') {\n return { listening: false, reason: status };\n }\n return this.toggle({ onText });\n }\n\n /** Start listening, or stop if already. */\n toggle({ onText } = {}) {\n if (this.session) {\n this.stop();\n return { listening: false };\n }\n try {\n this.session = listen({\n lang: this.#lang(),\n onText,\n onEnd: () => { this.session = null; this.#set({ listening: false }); },\n onError: (err) => {\n this.session = null;\n this.#set({ listening: false });\n // A refused microphone is a decision, not a fault worth shouting about.\n if (!/not-allowed|service-not-allowed|denied/i.test(err.message)) {\n this.notifications?.warn(`Couldn't listen: ${err.message}`);\n }\n },\n });\n this.#set({ listening: true });\n return { listening: true };\n } catch (err) {\n this.notifications?.warn(`Couldn't listen: ${err.message}`);\n return { listening: false, reason: 'error' };\n }\n }\n\n stop() {\n this.session?.stop();\n this.session = null;\n this.#set({ listening: false });\n }\n\n /**\n * Make sure a search field is on screen.\n *\n * Already on the launcher with nothing open → it is the search surface, use it. Any\n * other view, or a file open over it → the modal, which is the one search box that\n * can appear over anything.\n */\n openSearchSurface() {\n const wb = this.workbench;\n if (!wb) return;\n const onLauncher = wb.state.activity === 'home' && !wb.nav?.get?.().activeTabId;\n if (onLauncher) wb.closeSearchModal?.();\n else wb.openSearchModal();\n }\n\n /** @returns {Promise<boolean>} whether an input actually took focus */\n focusInput({ tries = 12 } = {}) {\n return new Promise((resolve) => {\n let left = tries;\n const attempt = () => {\n const el = document.querySelector('.search-modal .launch-input') || document.querySelector('.launch-input');\n if (el) {\n el.focus();\n // Put the caret at the end so dictation appends rather than overwriting a\n // query someone already typed.\n try { el.setSelectionRange(el.value.length, el.value.length); } catch { /* not a text input */ }\n resolve(document.activeElement === el);\n return;\n }\n if (--left <= 0) { resolve(false); return; }\n requestAnimationFrame(attempt);\n };\n attempt();\n });\n }\n}\n",
|
|
65
65
|
"// URLs for things that cannot send a header.\n//\n// An `<img src>`, a `<video src>` and `cache.add()` all fetch without our Authorization\n// header, so on a token-authenticated deployment they 401 and the preview shows a\n// fallback. The server can mint a URL that carries its own grant (see\n// docs/design/signed-urls.md); this is the client half.\n//\n// Two things it exists to get right:\n//\n// BATCHING — a gallery draws hundreds of tiles at once. Per-object signing is right for\n// scoping and hopeless as one round trip each, so ids asked for in the same tick go out\n// together.\n//\n// EXPIRY — a minted URL dies. Callers get `expiresAt` alongside and are expected to\n// cycle (see ui/media.js); this service will not hand back a URL that is about to\n// expire, so a caller that re-asks always gets something usable.\n\n// Re-mint at 80% of the remaining life rather than at the end: a URL handed out at 99%\n// of its life is one the caller will be back for almost immediately.\nconst FRESH_ENOUGH = 0.8;\n// Ids asked for within this window go out as one request. A frame is 16ms; this is long\n// enough to collect a grid's first paint and short enough not to be felt.\nconst BATCH_MS = 20;\nconst MAX_BATCH = 200;\n\nexport class MediaUrlService {\n /** @param {{api: object, settings?: object}} deps */\n constructor({ api, settings = null }) {\n this.api = api;\n this.settings = settings;\n this.cache = new Map(); // `${op}:${id}` -> { url, expiresAt }\n this._queue = new Map(); // op -> Map(id -> {resolve, reject})\n this._timer = null;\n }\n\n /**\n * Whether URLs need minting at all.\n *\n * With no bearer token the browser authenticates itself — a cookie or a proxy header\n * rides along on a subresource load — so the plain route URL works, needs no round\n * trip, and stays stable enough to be a cache key. Minting there would be a cost with\n * nothing bought. This is the one branch, and it lives here so callers have none.\n *\n * `media.signedUrls` overrides the guess: a deployment behind a proxy that still wants\n * media fetched straight from S3 sets `always`.\n */\n get needed() {\n const mode = this.settings?.get('media.signedUrls');\n if (mode === 'always') return true;\n if (mode === 'never') return false;\n return !!this.api.token?.();\n }\n\n /**\n * A stable identifier for this node's bytes.\n *\n * NOT the URL to fetch — a minted one carries a signature and changes every time. The\n * offline cache keys on this, because a key that changes per mint means `unpin` stops\n * matching what `pin` stored and the bytes are never reclaimed.\n */\n cacheKey(id) {\n return this.api.downloadUrl(id);\n }\n\n /**\n * A URL for this node's bytes, good for a while.\n *\n * @returns {Promise<{url: string, expiresAt: number}>} `expiresAt` is Infinity when\n * nothing was minted, so a caller's cycling logic simply never fires.\n */\n async url(id, { op = 'media' } = {}) {\n if (!this.needed) return { url: this.api.downloadUrl(id, { attachment: op === 'download' }), expiresAt: Infinity };\n const key = `${op}:${id}`;\n const hit = this.cache.get(key);\n if (hit && this.#fresh(hit)) return hit;\n return this.#enqueue(id, op);\n }\n\n /** Forget what we hold for a node, so the next ask re-mints. */\n invalidate(id, op = 'media') {\n if (id == null) this.cache.clear();\n else this.cache.delete(`${op}:${id}`);\n }\n\n #fresh(entry) {\n if (entry.expiresAt === Infinity) return true;\n const life = entry.expiresAt - entry.mintedAt;\n return Date.now() < entry.mintedAt + life * FRESH_ENOUGH;\n }\n\n #enqueue(id, op) {\n if (!this._queue.has(op)) this._queue.set(op, new Map());\n const forOp = this._queue.get(op);\n const existing = forOp.get(id);\n if (existing) return existing.promise;\n\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => { resolve = res; reject = rej; });\n forOp.set(id, { resolve, reject, promise });\n\n // Flush immediately at the cap rather than waiting out the window — a drive view that\n // asks for a thousand tiles should not hold the first two hundred hostage.\n if (forOp.size >= MAX_BATCH) this.#flush();\n else if (!this._timer) this._timer = setTimeout(() => this.#flush(), BATCH_MS);\n return promise;\n }\n\n async #flush() {\n clearTimeout(this._timer);\n this._timer = null;\n const queue = this._queue;\n this._queue = new Map();\n\n for (const [op, waiting] of queue) {\n const ids = [...waiting.keys()];\n try {\n const res = await this.api.mintUrls(ids, op);\n const now = Date.now();\n // Sweep before inserting. An expired entry can never be served again — `#fresh`\n // only decides whether a HIT is usable — and nothing else ever removed one: the\n // sole `invalidate` caller is a media element's error handler. Browsing a large\n // collection mints per pictorial tile, so the map grew an entry per image, none\n // reachable and none collectable for the life of the page. Two lines, and unlike\n // the interning table in bl/intern.js, evicting here costs a re-mint rather than a\n // duplicate realization.\n for (const [key, entry] of this.cache) {\n if (entry.expiresAt && entry.expiresAt < now) this.cache.delete(key);\n }\n for (const [id, w] of waiting) {\n const got = res.urls?.[id];\n if (got) {\n const entry = { url: got.url, expiresAt: got.expiresAt, mintedAt: now };\n this.cache.set(`${op}:${id}`, entry);\n w.resolve(entry);\n } else {\n // Absent from the answer means this caller may not read it. A rejection, not\n // a broken URL — the tile shows its icon rather than a broken-image glyph.\n w.reject(new Error(res.failed?.[id] === 'not_found' ? 'That file is gone' : 'You cannot open that file'));\n }\n }\n } catch (err) {\n for (const w of waiting.values()) w.reject(err);\n }\n }\n }\n}\n",
|
|
66
|
+
"// A plugin's key/value data for an item, local first and merged with the server.\n//\n// The plugin sees one interface and is told nothing about where the bytes are — see the\n// SDK's `files.data(id)`. That is the point: a viewer saving a listening position should\n// not have to know whether the drive is reachable, and should not lose the position when\n// it is not.\n//\n// SHAPE. Every write lands in a local map immediately, stamped, and is queued. The queue\n// flushes to `/api/items/:id/data` when it can; the server merges into the item's sidecar,\n// which is a CRDT, and answers with the merged view. A read is the local map merged over\n// whatever the server last said.\n//\n// The merge rule is last-write-wins on a wall-clock stamp, with the actor breaking ties —\n// the same rule the sidecar uses, so both ends agree without either being authoritative.\n// Wall clock rather than the sidecar's Lamport counter because these writes originate on\n// devices that have never spoken to each other: two phones, one of them offline for a day.\n// A Lamport clock cannot order those; a timestamp can, imperfectly and good enough for\n// \"where was I in this book\".\n//\n// PERSISTENCE is localStorage, not IndexedDB. This is a handful of small values per item\n// — a position, a rate, a bookmark — and localStorage is synchronous, which means a write\n// survives the tab being closed a millisecond later. An async store would not.\n\nconst KEY = 'trove.itemData';\nconst FLUSH_MS = 2000;\nconst MAX_ENTRIES = 5000;\n\nexport class ItemDataService {\n /**\n * @param {object} deps\n * @param {import('./api.js').Api} deps.api\n * @param {() => string} [deps.actor] who is writing, for tie-breaks\n */\n constructor({ api, actor = () => 'local' } = {}) {\n this.api = api;\n this.actor = actor;\n this.local = load(); // scope -> nodeId -> key -> { value, present, at, actor }\n this.pending = new Set(); // `${scope}\\0${nodeId}` awaiting a flush\n this.server = new Map(); // `${scope}\\0${nodeId}` -> plain object last seen\n this.timer = null;\n }\n\n /**\n * Everything this plugin knows about this item.\n *\n * Local over server, because local includes writes the server has not seen yet. A\n * server fetch is kicked off but not waited on: a viewer opening a book should draw\n * immediately from what this device already knows, and correct itself a moment later\n * if another device got further.\n */\n async get(scope, nodeId) {\n const merged = { ...(this.server.get(k(scope, nodeId)) || {}) };\n for (const [key, cell] of Object.entries(this.local[scope]?.[nodeId] || {})) {\n if (cell.present) merged[key] = cell.value;\n else delete merged[key];\n }\n this.#refresh(scope, nodeId);\n return merged;\n }\n\n /** Write now, locally; tell the server when there is one. */\n async set(scope, nodeId, key, value) {\n if (!key) return { ok: false };\n this.#put(scope, nodeId, key, { value, present: true });\n return { ok: true };\n }\n\n async remove(scope, nodeId, key) {\n if (!key) return { ok: false };\n // A tombstone, not a delete: the server may still hold the old value, and an absence\n // has to be a fact with a stamp or the merge will bring it back.\n this.#put(scope, nodeId, key, { value: null, present: false });\n return { ok: true };\n }\n\n #put(scope, nodeId, key, cell) {\n this.local[scope] ||= {};\n this.local[scope][nodeId] ||= {};\n this.local[scope][nodeId][key] = { ...cell, at: Date.now(), actor: this.actor() };\n save(this.local);\n this.pending.add(k(scope, nodeId));\n this.#schedule();\n }\n\n #schedule() {\n if (this.timer) return;\n // Coalesced: a scrubbing listener writes a position several times a second, and one\n // request per write would be a request per frame.\n this.timer = setTimeout(() => { this.timer = null; this.flush().catch(() => {}); }, FLUSH_MS);\n }\n\n /**\n * Push what is queued and take back what the server merged.\n *\n * A failure keeps the item queued — that is the whole reason writes are local first, and\n * dropping the queue on a flaky network would defeat it. Nothing is retried immediately;\n * the next write, or the next flush, carries it.\n */\n async flush() {\n for (const id of [...this.pending]) {\n const [scope, nodeId] = id.split('\\0');\n const cells = this.local[scope]?.[nodeId];\n if (!cells) { this.pending.delete(id); continue; }\n const entries = Object.entries(cells).map(([key, c]) => ({ key, value: c.value, remove: !c.present }));\n try {\n const res = await this.api.request('POST', `/api/items/${encodeURIComponent(nodeId)}/data`, {\n query: { scope }, body: { entries },\n });\n this.pending.delete(id);\n this.server.set(id, res?.data || {});\n // The local copy has served its purpose once the server has it: keeping it would\n // make a stale local value outlive a newer one written elsewhere.\n delete this.local[scope][nodeId];\n save(this.local);\n } catch {\n // Left queued deliberately. See above.\n }\n }\n }\n\n /** Ask the server what it has, without blocking the caller that wanted a value. */\n #refresh(scope, nodeId) {\n const id = k(scope, nodeId);\n if (this.inflight?.has(id)) return;\n (this.inflight ||= new Set()).add(id);\n this.api.request('GET', `/api/items/${encodeURIComponent(nodeId)}/data`, { query: { scope } })\n .then((res) => { this.server.set(id, res?.data || {}); })\n .catch(() => {})\n .finally(() => this.inflight.delete(id));\n }\n}\n\nconst k = (scope, nodeId) => `${scope}\\0${nodeId}`;\n\nfunction load() {\n try {\n const raw = JSON.parse(localStorage.getItem(KEY)) || {};\n return raw && typeof raw === 'object' ? raw : {};\n } catch { return {}; }\n}\n\nfunction save(local) {\n try {\n // Bounded, because this is localStorage and a plugin writing per-item state across a\n // large drive would otherwise fill it and start throwing on every write — including\n // the writes of every other feature that shares the quota. Oldest stamps go first.\n const flat = [];\n for (const [scope, nodes] of Object.entries(local)) {\n for (const [nodeId, cells] of Object.entries(nodes)) {\n for (const [key, cell] of Object.entries(cells)) flat.push({ scope, nodeId, key, cell });\n }\n }\n if (flat.length > MAX_ENTRIES) {\n flat.sort((a, b) => (a.cell.at || 0) - (b.cell.at || 0));\n for (const { scope, nodeId, key } of flat.slice(0, flat.length - MAX_ENTRIES)) {\n delete local[scope][nodeId][key];\n }\n }\n localStorage.setItem(KEY, JSON.stringify(local));\n } catch { /* private mode, or full: the in-memory copy still works for this session */ }\n}\n",
|
|
66
67
|
"// Where a file's bytes come from, and which of them are worth keeping.\n//\n// A viewer reading a range asks here rather than asking the network, and the answer comes\n// from the first of three places that has it:\n//\n// 1. A PINNED whole-file copy. bl/offline.js already puts the whole Response into Cache\n// Storage under `mediaUrls.cacheKey(id)` — a deliberately stable key, so `unpin` can\n// find what `pin` stored. Slicing that cached blob is disk-backed and costs nothing,\n// so a pinned book plays with the network off and this tier comes almost free.\n// 2. CHUNKS of a download in progress. Playing from the middle fetches the middle, and\n// if that file is also being taken offline those bytes are worth keeping — so the\n// read contributes them and the background filler skips them later.\n// 3. The network, keeping NOTHING.\n//\n// THE THIRD CASE IS THE DEFAULT, and it is the rule the whole design hangs off: a plugin\n// ranging over a file nobody asked to keep must not quietly fill the disk with it. Bytes\n// are retained only for an item someone has actually asked to have offline, and `start(id)`\n// is that asking. Until it is called this is a plain ranged reader with a cache lookup in\n// front of it.\n//\n// THE ETAG IS IN THE KEY. A file overwritten in place keeps its id, so an id-keyed chunk\n// cache would hand a reader the head of the old file and the tail of the new one. For a\n// container format that is a parse failure, and a confusing one — the bytes are all valid,\n// they are just from two different files. A changed etag makes every old chunk stop\n// matching, and the sweep reclaims them.\n\nconst CHUNKS_CACHE = 'trove-chunks-v1';\n\n/**\n * 4 MiB.\n *\n * A long audiobook is a few hundred entries at this size rather than a few thousand, and\n * Cache Storage is a real database — the per-entry overhead is what makes a small chunk\n * size expensive, not the bytes. Big enough that one chunk usually covers a seek, small\n * enough that the first one arrives quickly.\n */\nexport const CHUNK_SIZE = 4 * 1024 * 1024;\n\nconst chunkOf = (offset) => Math.floor(offset / CHUNK_SIZE);\nconst concat = (parts, total) => {\n const out = new Uint8Array(total);\n let at = 0;\n for (const p of parts) { out.set(p, at); at += p.length; }\n return out;\n};\n\nexport class FileChunks {\n /** @param {{api: object, mediaUrls: object}} deps */\n constructor({ api, mediaUrls }) {\n this.api = api;\n this.mediaUrls = mediaUrls;\n // What someone asked to keep: id -> { etag, total, cancel, filling, done, failed }.\n // In memory because it is about THIS session's background work; what survives a reload\n // is the chunks themselves, which is the durable half.\n this.kept = new Map();\n this.listeners = new Set();\n }\n\n /** Progress, for a viewer drawing a bar. `off()` to stop listening. */\n onProgress(fn) {\n this.listeners.add(fn);\n return () => this.listeners.delete(fn);\n }\n #emit(id) {\n const s = this.status(id);\n for (const fn of [...this.listeners]) { try { fn(id, s); } catch { /* a listener is not our problem */ } }\n }\n\n #key(id, etag, index) {\n // The stable download URL, plus a QUERY parameter. Not a fragment: the Cache API keys\n // on a Request, and a Request's url excludes its fragment — so `…#chunk=0` and\n // `…#chunk=1` are the same key, and every chunk of every file would collide on the\n // first one. It reads as \"part of this file\" in devtools either way.\n return `${this.mediaUrls.cacheKey(id)}&chunk=${etag || 'none'}:${CHUNK_SIZE}:${index}`;\n }\n\n async #cache(name) {\n if (!('caches' in globalThis)) return null;\n return caches.open(name).catch(() => null);\n }\n\n /**\n * The pinned whole-file copy, if there is one.\n *\n * Tier 1, and the reason it is first: it needs no chunking, no etag bookkeeping and no\n * network, because `bl/offline.js` already put the entire Response there.\n */\n async #pinned(id) {\n const cache = await this.#cache('trove-files-v1');\n if (!cache) return null;\n return cache.match(this.mediaUrls.cacheKey(id), { ignoreVary: true }).catch(() => null);\n }\n\n /**\n * Read `[start, end)`.\n *\n * @param {string} id\n * @param {{start?: number, end?: number, signal?: AbortSignal}} range\n * @returns {Promise<{bytes: Uint8Array, etag: string|null, total: number|null}>}\n */\n async read(id, { start = 0, end, signal } = {}) {\n const whole = await this.#pinned(id);\n if (whole) {\n const blob = await whole.blob();\n const stop = end == null ? blob.size : Math.min(end, blob.size);\n const bytes = new Uint8Array(await blob.slice(start, stop).arrayBuffer());\n return { bytes, etag: whole.headers.get('etag'), total: blob.size };\n }\n\n const keep = this.kept.get(id);\n // Not kept: a plain ranged read, and nothing is written anywhere. This is the branch\n // that runs for every file nobody asked to keep, which is almost all of them.\n if (!keep) return this.api.readRange(id, { start, end, signal });\n\n return this.#readChunked(id, keep, start, end, signal);\n }\n\n /** The kept path: whole chunks, from the cache where possible, contributed on a miss. */\n async #readChunked(id, keep, start, end, signal) {\n const cache = await this.#cache(CHUNKS_CACHE);\n if (!cache) return this.api.readRange(id, { start, end, signal });\n\n // The total has to be known before the last chunk can be sized, and the cheapest way\n // to learn it is the first read — which we were doing anyway.\n if (keep.total == null) {\n const head = await this.api.readRange(id, { start: 0, end: 1, signal });\n keep.total = head.total;\n keep.etag = head.etag;\n }\n const stop = Math.min(end == null ? keep.total : end, keep.total);\n if (stop <= start) return { bytes: new Uint8Array(0), etag: keep.etag, total: keep.total };\n\n const parts = [];\n let got = 0;\n for (let i = chunkOf(start); i <= chunkOf(stop - 1); i++) {\n const chunk = await this.#chunk(id, keep, i, cache, signal);\n // The window this chunk contributes, in the chunk's own coordinates.\n const from = Math.max(0, start - i * CHUNK_SIZE);\n const to = Math.min(chunk.length, stop - i * CHUNK_SIZE);\n const piece = chunk.subarray(from, to);\n parts.push(piece);\n got += piece.length;\n }\n return { bytes: concat(parts, got), etag: keep.etag, total: keep.total };\n }\n\n /** One chunk: cached if it is there, fetched and KEPT if it is not. */\n async #chunk(id, keep, index, cache, signal) {\n const key = this.#key(id, keep.etag, index);\n const hit = await cache.match(key).catch(() => null);\n if (hit) {\n keep.have.add(index);\n return new Uint8Array(await hit.arrayBuffer());\n }\n\n const start = index * CHUNK_SIZE;\n const end = Math.min(start + CHUNK_SIZE, keep.total);\n const res = await this.api.readRange(id, { start, end, signal });\n // The etag can change under us mid-download — someone replaced the file. Everything\n // already stored is from a file that no longer exists, so it is dropped rather than\n // mixed with what is arriving.\n if (res.etag && keep.etag && res.etag !== keep.etag) {\n await this.#dropChunks(id);\n keep.have.clear();\n keep.etag = res.etag;\n keep.total = res.total ?? keep.total;\n }\n await cache.put(key, new Response(res.bytes)).catch(() => {});\n keep.have.add(index);\n this.#emit(id);\n return res.bytes;\n }\n\n /**\n * Keep this item offline, and fill in what is missing in the background.\n *\n * IDEMPOTENT: starting a download that is already running returns its status rather than\n * racing a second filler over the same chunks — two fillers would each fetch every chunk\n * the other had not written yet, which is the whole file twice.\n */\n async start(id) {\n const running = this.kept.get(id);\n if (running) return this.status(id);\n\n const head = await this.api.readRange(id, { start: 0, end: 1 });\n const controller = new AbortController();\n const keep = {\n etag: head.etag, total: head.total, filling: true, done: false, failed: null,\n // Which chunk indices are stored. `loaded` is DERIVED from this rather than counted\n // up as bytes arrive, so a chunk written by a viewer's seek and a chunk written by\n // the background filler are the same fact and neither double-counts the other.\n have: new Set(),\n controller,\n };\n this.kept.set(id, keep);\n this.#emit(id);\n // Not awaited: `start` answers immediately so a viewer can begin playing while the\n // rest arrives. Failures land on the status, which is what a progress bar reads.\n this.#fill(id, keep, controller.signal).catch((err) => {\n keep.filling = false;\n keep.failed = err?.message || String(err);\n this.#emit(id);\n });\n return this.status(id);\n }\n\n /** In order, skipping what is already there — which is what makes a seek pay for itself. */\n async #fill(id, keep, signal) {\n const cache = await this.#cache(CHUNKS_CACHE);\n if (!cache) throw new Error('This browser has no Cache Storage, so nothing can be kept offline');\n const count = Math.max(1, Math.ceil((keep.total || 0) / CHUNK_SIZE));\n for (let i = 0; i < count; i++) {\n if (signal.aborted) return;\n await this.#chunk(id, keep, i, cache, signal);\n }\n keep.filling = false;\n keep.done = true;\n this.#emit(id);\n }\n\n /**\n * How much of it is here.\n *\n * `loaded` counts what has been WRITTEN, not what has been asked for, so a bar built on\n * it never runs ahead of the bytes.\n */\n status(id) {\n const keep = this.kept.get(id);\n if (!keep) return { kept: false, loaded: 0, total: null, ratio: 0, filling: false, done: false, error: null };\n const total = keep.total ?? null;\n // The last chunk is short, so counting every stored chunk as a whole one would report\n // more bytes than the file has.\n const last = total ? Math.ceil(total / CHUNK_SIZE) - 1 : -1;\n let loaded = 0;\n for (const i of keep.have) loaded += i === last ? total - last * CHUNK_SIZE : CHUNK_SIZE;\n return {\n kept: true,\n total,\n loaded,\n ratio: total ? Math.min(1, loaded / total) : 0,\n filling: keep.filling,\n done: keep.done,\n error: keep.failed,\n };\n }\n\n /** Stop filling. What is already stored stays — a resumed download starts from it. */\n cancel(id) {\n const keep = this.kept.get(id);\n if (!keep) return;\n keep.controller?.abort();\n keep.filling = false;\n this.#emit(id);\n }\n\n /** Stop keeping it, and reclaim the bytes. */\n async remove(id) {\n const keep = this.kept.get(id);\n this.cancel(id);\n this.kept.delete(id);\n keep?.have?.clear();\n await this.#dropChunks(id);\n this.#emit(id);\n }\n\n /**\n * Drop every chunk for this file, whatever etag they were stored under.\n *\n * Prefix-matched rather than index-counted: after an etag change we no longer know how\n * many chunks the old file had, and leaving them would be a leak nothing ever reclaims.\n */\n async #dropChunks(id) {\n const cache = await this.#cache(CHUNKS_CACHE);\n if (!cache) return;\n const prefix = `${this.mediaUrls.cacheKey(id)}&chunk=`;\n const keys = await cache.keys().catch(() => []);\n for (const req of keys) {\n if (req.url.startsWith(prefix)) await cache.delete(req).catch(() => {});\n }\n }\n}\n",
|
|
67
|
-
"// createPlatform — assemble every service into one object the whole app shares.\n// This is the \"workbench platform\": the reactive registries and services that core\n// features and plugins both build on. It also registers the default settings schema and\n// keybindings so the shell has sensible behaviour out of the box.\n//\n// It does NOT hold the shell's state. Which activity is open, whether the palette is\n// showing, what is on the panel stack — those are engine resources, built by createApp\n// (see ../bl/state.js). The platform is the machinery underneath them.\n\nimport { reactive } from '../runtime.js';\nimport { ContributionRegistry } from './contributions.js';\nimport { ContextRegistry } from './context.js';\nimport { CommandService } from './commands.js';\nimport { KeybindingService } from './keybindings.js';\nimport { SettingsService } from './settings.js';\nimport { NotificationService } from './notifications.js';\nimport { TroveApiClient } from './api.js';\nimport { PluginHost } from './pluginHost.js';\nimport { ViewportService } from './viewport.js';\nimport { SpatialNavigationService } from './spatialNav.js';\nimport { VoiceSearchService } from './voiceSearch.js';\nimport { MediaUrlService } from './mediaUrls.js';\nimport { FileChunks } from './fileChunks.js';\n\n/**\n * The bearer token for this browser, if any.\n *\n * `localStorage` rather than a cookie because the token is presented as an\n * Authorization header, not sent ambiently — which is what makes CSRF a non-issue here.\n * Wrapped in try/catch because storage access throws outright in some privacy modes,\n * and a drive that white-screens because it couldn't read a key that is usually absent\n * would be a poor trade.\n */\nexport function readToken() {\n try { return localStorage.getItem('trove.token') || null; } catch { return null; }\n}\n// Read only, deliberately: nothing in the workbench signs in. The key is written by the\n// page that EMBEDS the workbench — see test/multiuser.e2e.mjs, which is the arrangement\n// this is built for — so a writer here would be a second owner of somebody else's fact.\nexport function createPlatform({ baseUrl = '' } = {}) {\n const contributions = new ContributionRegistry();\n // Only the fixed facts are seeded. Everything else is registered by whoever owns it —\n // the built-in keys are derived from the shell and the drive (see bl/context.js), so\n // there is nothing sensible to pre-fill them with and nothing that would go stale if\n // there were.\n //\n // It used to be seeded with `view.active: 'home'` for a reason worth remembering: nothing\n // wrote that key until the user navigated, so every `when: view.active == 'home'`\n // binding — the Delete shortcut among them — was dead from boot until the first click on\n // the rail, while the row menu cheerfully advertised \"Del\" as the way to delete. A\n // derived key is never unwritten, so the seed is not needed and cannot drift from the\n // state it was standing in for.\n const context = new ContextRegistry();\n const notifications = new NotificationService();\n const commands = new CommandService(contributions, context, notifications);\n const settings = new SettingsService();\n const keybindings = new KeybindingService(contributions, commands, context, settings);\n // A bearer token, when this deployment uses one. Most don't: an authenticating proxy\n // (Cloudflare Access, oauth2-proxy) sets its own header and the browser sends nothing.\n // But a deployment where the user HOLDS a token has no other way to present it, and\n // reading it here — once, from one place — keeps that out of every call site.\n const api = new TroveApiClient({ baseUrl, token: () => readToken() });\n // Which shell to render — phone, desktop, or TV. Constructed before the defaults are\n // registered, so it reads the setting through `settings.get` once that exists.\n const viewport = new ViewportService({ settings });\n // Arrow keys → geometry, but only on a TV. Inert everywhere else.\n const spatialNav = new SpatialNavigationService({ viewport });\n // Speak to search. Mostly this just puts the search field under the remote's mic —\n // see voiceSearch.js for why that is the whole feature on a TV.\n const voice = new VoiceSearchService({ notifications, settings });\n\n const platform = {\n reactive,\n contributions, context, commands, keybindings, settings, notifications, api,\n viewport, spatialNav, voice,\n // The shell's own state is the engine's, not the platform's — createApp builds it and\n // hands back what the few imperative edges below still need.\n };\n platform.mediaUrls = new MediaUrlService({ api: platform.api, settings });\n // Where a viewer's ranged reads go: a pinned copy, chunks of a download someone asked\n // for, or the network keeping nothing. See fileChunks.js — the retention rule is the\n // whole point of it having a name of its own.\n platform.fileChunks = new FileChunks({ api: platform.api, mediaUrls: platform.mediaUrls });\n platform.plugins = new PluginHost(platform);\n // Commands consult the plugin host to hide/disable plugin commands that aren't\n // available right now (offline, or the plugin isn't responding).\n commands.availability = (cmd) => platform.plugins.isAvailable(cmd);\n\n registerDefaults(platform);\n // Defaults are in place now, so re-measure: `workbench.layout` was unreadable a moment\n // ago and a forced layout must not need a resize to take effect.\n viewport.refresh();\n return platform;\n}\n\nfunction registerDefaults(p) {\n // --- default settings schema ----------------------------------------------\n p.settings.register([\n { key: 'workbench.theme', type: 'enum', enum: ['dark', 'light', 'midnight'], enumLabels: ['Dark', 'Light', 'Midnight'], default: 'dark', title: 'Color theme', category: 'Appearance', order: 1 },\n { key: 'workbench.density', type: 'enum', enum: ['comfortable', 'compact'], default: 'comfortable', title: 'List density', category: 'Appearance', order: 2 },\n // Auto gets it right for phones and desktops. TVs are the reason this is a setting:\n // a browser on a set-top box usually looks like a large desktop, so someone using\n // one with a remote needs a way to say so.\n { key: 'workbench.layout', type: 'enum', enum: ['auto', 'desktop', 'phone', 'tv'],\n enumLabels: ['Automatic', 'Desktop', 'Phone', 'TV / remote'], default: 'auto',\n title: 'Layout', description: 'Automatic follows the screen size. Choose TV for d-pad remote navigation.',\n category: 'Appearance', order: 3 },\n { key: 'explorer.sort', type: 'enum', enum: ['name', 'size', 'updatedAt'], enumLabels: ['Name', 'Size', 'Modified'], default: 'name', title: 'Sort files by', category: 'Explorer', order: 1 },\n { key: 'explorer.sortOrder', type: 'enum', enum: ['asc', 'desc'], default: 'asc', title: 'Sort order', category: 'Explorer', order: 2 },\n { key: 'explorer.confirmDelete', type: 'boolean', default: true, title: 'Confirm before deleting', category: 'Explorer', order: 3 },\n { key: 'search.mode', type: 'enum', enum: ['hybrid', 'semantic', 'keyword'], default: 'hybrid', title: 'Search mode', description: 'Hybrid blends semantic meaning with keyword matches.', category: 'Search', order: 1 },\n { key: 'uploads.concurrency', type: 'number', minimum: 1, maximum: 8, default: 4, title: 'Parallel upload parts', category: 'Transfers', order: 1 },\n // Which viewer opens which file type. When several openers match a file and there\n // is no entry here, the user is asked (and can save their answer) — see bl/openers.\n // Markdown ships with an answer already: it matches both the markdown renderer and\n // the plain-text viewer, and since documents are how things are grouped now,\n // prompting on every first .md would be friction over a decision that's obvious.\n // It stays changeable in Settings, and the text viewer is still reachable through\n // the opener switcher.\n { key: 'openers.associations', type: 'object', hidden: true, title: 'Default viewers',\n default: { '.md': 'core.markdown', '.markdown': 'core.markdown' } },\n // How results are drawn (see ui/components/views). Hidden and with no default on\n // purpose: unset means \"you decide\", and the launcher then offers the grid by itself\n // for a collection full of pictures. Picking one in the switcher pins it.\n { key: 'explorer.view', type: 'string', hidden: true, title: 'Results view' },\n // Whether media fetches use a URL that carries its own grant (see\n // platform/mediaUrls.js). `auto` mints only where the browser cannot authenticate\n // itself, which is the right answer almost everywhere — hence hidden.\n { key: 'media.signedUrls', type: 'enum', enum: ['auto', 'always', 'never'], default: 'auto',\n hidden: true, title: 'Signed media URLs' },\n ]);\n\n // --- the built-in keymap (commands themselves are registered in ../bl) -----\n // One `keymap` contribution, exactly like a plugin's — the host has no privileged\n // path into the keybinding service.\n p.contributions.register('keymap.default', {\n type: 'keymap',\n bindings: [\n { key: 'mod+shift+p', command: 'workbench.showCommandPalette' },\n { key: 'mod+p', command: 'workbench.quickOpen' },\n { key: 'mod+shift+f', command: 'workbench.view.home' },\n { key: 'mod+shift+e', command: 'workbench.view.home' },\n { key: 'mod+,', command: 'workbench.openSettings' },\n { key: 'mod+shift+l', command: 'explorer.copyLink' },\n { key: 'mod+u', command: 'explorer.upload' },\n { key: 'delete', command: 'explorer.delete', when: \"view.active == 'home' && explorer.hasSelection\" },\n { key: 'escape', command: 'workbench.closeOverlays' },\n { key: 'f5', command: 'explorer.refresh' },\n { key: 'mod+shift+i', command: 'workbench.toggleInfoPanel' },\n // Some remotes and keyboards send a dedicated search key; where they do, it lands\n // on the one command that opens the search field ready for dictation.\n { key: 'mod+shift+v', command: 'search.voice' },\n { key: 'browsersearch', command: 'search.voice' },\n ],\n });\n}\n",
|
|
68
|
+
"// createPlatform — assemble every service into one object the whole app shares.\n// This is the \"workbench platform\": the reactive registries and services that core\n// features and plugins both build on. It also registers the default settings schema and\n// keybindings so the shell has sensible behaviour out of the box.\n//\n// It does NOT hold the shell's state. Which activity is open, whether the palette is\n// showing, what is on the panel stack — those are engine resources, built by createApp\n// (see ../bl/state.js). The platform is the machinery underneath them.\n\nimport { reactive } from '../runtime.js';\nimport { ContributionRegistry } from './contributions.js';\nimport { ContextRegistry } from './context.js';\nimport { CommandService } from './commands.js';\nimport { KeybindingService } from './keybindings.js';\nimport { SettingsService } from './settings.js';\nimport { NotificationService } from './notifications.js';\nimport { TroveApiClient } from './api.js';\nimport { PluginHost } from './pluginHost.js';\nimport { ViewportService } from './viewport.js';\nimport { SpatialNavigationService } from './spatialNav.js';\nimport { VoiceSearchService } from './voiceSearch.js';\nimport { MediaUrlService } from './mediaUrls.js';\nimport { ItemDataService } from './itemData.js';\nimport { FileChunks } from './fileChunks.js';\n\n/**\n * The bearer token for this browser, if any.\n *\n * `localStorage` rather than a cookie because the token is presented as an\n * Authorization header, not sent ambiently — which is what makes CSRF a non-issue here.\n * Wrapped in try/catch because storage access throws outright in some privacy modes,\n * and a drive that white-screens because it couldn't read a key that is usually absent\n * would be a poor trade.\n */\nexport function readToken() {\n try { return localStorage.getItem('trove.token') || null; } catch { return null; }\n}\n// Read only, deliberately: nothing in the workbench signs in. The key is written by the\n// page that EMBEDS the workbench — see test/multiuser.e2e.mjs, which is the arrangement\n// this is built for — so a writer here would be a second owner of somebody else's fact.\nexport function createPlatform({ baseUrl = '' } = {}) {\n const contributions = new ContributionRegistry();\n // Only the fixed facts are seeded. Everything else is registered by whoever owns it —\n // the built-in keys are derived from the shell and the drive (see bl/context.js), so\n // there is nothing sensible to pre-fill them with and nothing that would go stale if\n // there were.\n //\n // It used to be seeded with `view.active: 'home'` for a reason worth remembering: nothing\n // wrote that key until the user navigated, so every `when: view.active == 'home'`\n // binding — the Delete shortcut among them — was dead from boot until the first click on\n // the rail, while the row menu cheerfully advertised \"Del\" as the way to delete. A\n // derived key is never unwritten, so the seed is not needed and cannot drift from the\n // state it was standing in for.\n const context = new ContextRegistry();\n const notifications = new NotificationService();\n const commands = new CommandService(contributions, context, notifications);\n const settings = new SettingsService();\n const keybindings = new KeybindingService(contributions, commands, context, settings);\n // A bearer token, when this deployment uses one. Most don't: an authenticating proxy\n // (Cloudflare Access, oauth2-proxy) sets its own header and the browser sends nothing.\n // But a deployment where the user HOLDS a token has no other way to present it, and\n // reading it here — once, from one place — keeps that out of every call site.\n const api = new TroveApiClient({ baseUrl, token: () => readToken() });\n // Which shell to render — phone, desktop, or TV. Constructed before the defaults are\n // registered, so it reads the setting through `settings.get` once that exists.\n const viewport = new ViewportService({ settings });\n // Arrow keys → geometry, but only on a TV. Inert everywhere else.\n const spatialNav = new SpatialNavigationService({ viewport });\n // Speak to search. Mostly this just puts the search field under the remote's mic —\n // see voiceSearch.js for why that is the whole feature on a TV.\n const voice = new VoiceSearchService({ notifications, settings });\n\n const platform = {\n reactive,\n contributions, context, commands, keybindings, settings, notifications, api,\n viewport, spatialNav, voice,\n // The shell's own state is the engine's, not the platform's — createApp builds it and\n // hands back what the few imperative edges below still need.\n };\n platform.mediaUrls = new MediaUrlService({ api: platform.api, settings });\n // Where a viewer's ranged reads go: a pinned copy, chunks of a download someone asked\n // for, or the network keeping nothing. See fileChunks.js — the retention rule is the\n // whole point of it having a name of its own.\n platform.fileChunks = new FileChunks({ api: platform.api, mediaUrls: platform.mediaUrls });\n // Per-plugin, per-item state — a listening position, a last page. Local first, merged\n // with the server's sidecar when there is one. See itemData.js for why it is neither a\n // contribution nor a setting.\n platform.itemData = new ItemDataService({\n api: platform.api,\n actor: () => platform.identity?.get?.()?.principal?.id || 'local',\n });\n platform.plugins = new PluginHost(platform);\n // Commands consult the plugin host to hide/disable plugin commands that aren't\n // available right now (offline, or the plugin isn't responding).\n commands.availability = (cmd) => platform.plugins.isAvailable(cmd);\n\n registerDefaults(platform);\n // Defaults are in place now, so re-measure: `workbench.layout` was unreadable a moment\n // ago and a forced layout must not need a resize to take effect.\n viewport.refresh();\n return platform;\n}\n\nfunction registerDefaults(p) {\n // --- default settings schema ----------------------------------------------\n p.settings.register([\n { key: 'workbench.theme', type: 'enum', enum: ['dark', 'light', 'midnight'], enumLabels: ['Dark', 'Light', 'Midnight'], default: 'dark', title: 'Color theme', category: 'Appearance', order: 1 },\n { key: 'workbench.density', type: 'enum', enum: ['comfortable', 'compact'], default: 'comfortable', title: 'List density', category: 'Appearance', order: 2 },\n // Auto gets it right for phones and desktops. TVs are the reason this is a setting:\n // a browser on a set-top box usually looks like a large desktop, so someone using\n // one with a remote needs a way to say so.\n { key: 'workbench.layout', type: 'enum', enum: ['auto', 'desktop', 'phone', 'tv'],\n enumLabels: ['Automatic', 'Desktop', 'Phone', 'TV / remote'], default: 'auto',\n title: 'Layout', description: 'Automatic follows the screen size. Choose TV for d-pad remote navigation.',\n category: 'Appearance', order: 3 },\n { key: 'explorer.sort', type: 'enum', enum: ['name', 'size', 'updatedAt'], enumLabels: ['Name', 'Size', 'Modified'], default: 'name', title: 'Sort files by', category: 'Explorer', order: 1 },\n { key: 'explorer.sortOrder', type: 'enum', enum: ['asc', 'desc'], default: 'asc', title: 'Sort order', category: 'Explorer', order: 2 },\n { key: 'explorer.confirmDelete', type: 'boolean', default: true, title: 'Confirm before deleting', category: 'Explorer', order: 3 },\n { key: 'search.mode', type: 'enum', enum: ['hybrid', 'semantic', 'keyword'], default: 'hybrid', title: 'Search mode', description: 'Hybrid blends semantic meaning with keyword matches.', category: 'Search', order: 1 },\n { key: 'uploads.concurrency', type: 'number', minimum: 1, maximum: 8, default: 4, title: 'Parallel upload parts', category: 'Transfers', order: 1 },\n // Which viewer opens which file type. When several openers match a file and there\n // is no entry here, the user is asked (and can save their answer) — see bl/openers.\n // Markdown ships with an answer already: it matches both the markdown renderer and\n // the plain-text viewer, and since documents are how things are grouped now,\n // prompting on every first .md would be friction over a decision that's obvious.\n // It stays changeable in Settings, and the text viewer is still reachable through\n // the opener switcher.\n { key: 'openers.associations', type: 'object', hidden: true, title: 'Default viewers',\n default: { '.md': 'core.markdown', '.markdown': 'core.markdown' } },\n // How results are drawn (see ui/components/views). Hidden and with no default on\n // purpose: unset means \"you decide\", and the launcher then offers the grid by itself\n // for a collection full of pictures. Picking one in the switcher pins it.\n { key: 'explorer.view', type: 'string', hidden: true, title: 'Results view' },\n // Whether media fetches use a URL that carries its own grant (see\n // platform/mediaUrls.js). `auto` mints only where the browser cannot authenticate\n // itself, which is the right answer almost everywhere — hence hidden.\n { key: 'media.signedUrls', type: 'enum', enum: ['auto', 'always', 'never'], default: 'auto',\n hidden: true, title: 'Signed media URLs' },\n ]);\n\n // --- the built-in keymap (commands themselves are registered in ../bl) -----\n // One `keymap` contribution, exactly like a plugin's — the host has no privileged\n // path into the keybinding service.\n p.contributions.register('keymap.default', {\n type: 'keymap',\n bindings: [\n { key: 'mod+shift+p', command: 'workbench.showCommandPalette' },\n { key: 'mod+p', command: 'workbench.quickOpen' },\n { key: 'mod+shift+f', command: 'workbench.view.home' },\n { key: 'mod+shift+e', command: 'workbench.view.home' },\n { key: 'mod+,', command: 'workbench.openSettings' },\n { key: 'mod+shift+l', command: 'explorer.copyLink' },\n { key: 'mod+u', command: 'explorer.upload' },\n { key: 'delete', command: 'explorer.delete', when: \"view.active == 'home' && explorer.hasSelection\" },\n { key: 'escape', command: 'workbench.closeOverlays' },\n { key: 'f5', command: 'explorer.refresh' },\n { key: 'mod+shift+i', command: 'workbench.toggleInfoPanel' },\n // Some remotes and keyboards send a dedicated search key; where they do, it lands\n // on the one command that opens the search field ready for dictation.\n { key: 'mod+shift+v', command: 'search.voice' },\n { key: 'browsersearch', command: 'search.voice' },\n ],\n });\n}\n",
|
|
68
69
|
"// The built-in context keys, DERIVED.\n//\n// Every key here is a function of a resource's state. That is not a refactor of where the\n// writes live — it removes the writes. A derived key cannot be forgotten when a new code\n// path changes the thing it summarises, which is the failure the old shape kept producing:\n// `explorer.hasSelection` was set by NavigateAction and by nothing else, so selecting a file\n// in the launcher left it false and the Delete keybinding silently did nothing.\n//\n// Registered in one place because that is what makes the list reviewable. A when-clause is\n// only as trustworthy as the least-maintained key it names, and they were spread across five\n// services.\n\nimport { derive } from '../runtime.js';\n\n/**\n * Register every built-in key against the resources it is derived from.\n *\n * @param {import('../platform/context.js').ContextRegistry} registry\n * @param {object} r the resources these summarise\n * @returns {() => void} unregister them all\n */\nexport function registerCoreContext(registry, { workbench, overlay, navigation, explorer }) {\n const wb = workbench.observe();\n const nav = navigation.observe();\n const ov = overlay.observe();\n const ex = explorer.observe();\n\n const keys = {\n // Which screen is showing. Seeded as 'home' because that is where the app starts, and a\n // `when: view.active == 'home'` binding — the Delete shortcut among them — was dead from\n // boot until the first click on the rail when nothing had written the key yet.\n 'view.active': derive([wb], (s) => s.activity),\n 'sidebar.visible': derive([wb], (s) => s.sidebarVisible),\n 'searchModal.open': derive([wb], (s) => !!s.searchModal),\n 'sheet.open': derive([wb], (s) => s.sheet || ''),\n 'infoPanel.open': derive([wb], (s) => !!s.infoPanel),\n\n 'palette.open': derive([ov], (s) => !!s.palette),\n\n // What is open in the viewer, for openers and viewer-scoped shortcuts.\n 'editor.open': derive([nav], (s) => !!s.activeFile),\n 'editor.openerId': derive([nav], (s) => s.stack?.at(-1)?.openerId || ''),\n 'editor.contentType': derive([nav], (s) => s.activeFile?.contentType || ''),\n\n // `null` when no collection is open, never the string 'default'. A when-clause reading\n // this is asking WHICH collection is open, and answering with the name of one that may\n // not exist made every such clause true before the user had chosen anything.\n 'explorer.collectionId': derive([ex], (s) => s.collectionId ?? null),\n 'explorer.hasSelection': derive([ex], (s) => (s.selection?.length || 0) > 0),\n };\n\n const offs = Object.entries(keys).map(([key, source]) => registry.register(key, source));\n return () => offs.forEach((off) => off());\n}\n\n/**\n * The viewport's keys, registered separately because the viewport is measured rather than\n * derived from a resource — it comes from the window, and the service already holds a cell\n * of what it measured.\n */\nexport function registerViewportContext(registry, viewport) {\n const vp = viewport.observe();\n const offs = [\n registry.register('viewport.mode', derive([vp], (s) => s.mode)),\n registry.register('viewport.phone', derive([vp], (s) => s.mode === 'phone')),\n registry.register('viewport.tv', derive([vp], (s) => s.mode === 'tv')),\n ];\n return () => offs.forEach((off) => off());\n}\n",
|
|
69
|
-
"// NavigationService — the main panel STACK and its browser-history mirror. The base\n// of the stack is the launcher (search); opening a file pushes a viewer panel; back\n// pops. The stack is mirrored into window.history (pushState/popState) so the browser\n// back/forward buttons navigate it. Also owns the \"recent files\" list. Extracted from\n// WorkbenchService; the workbench coordinates the couplings it can't own (setting the\n// activity to 'home' and closing the modal search when a file opens).\n\nimport { cell } from '../runtime.js';\n\nconst RECENTS_KEY = 'trove.recents';\nconst RECENTS_MAX = 12;\n\nexport class NavigationService {\n #state;\n\n constructor() {\n this.#state = {\n stack: [{ kind: 'search' }], // [{kind:'search'}, {kind:'file', id, node, openerId}, …]\n activeTabId: null, // top file panel id (or null)\n activeFile: null, // top file panel node (or null)\n recents: loadRecents(),\n };\n this.cell = cell(this.#state);\n }\n\n /**\n * The value, for whoever is about to decide something from it.\n *\n * The same door every slice offers. Actions read `.state` and queries read `.cell`, and\n * the two are only equal by habit — bl/state.js says so, and says a resource has one\n * value and one way to read it. `state` is also a public field on a service, which is one\n * typo from `social.state.sidecar = null` bypassing the cell and notifying nothing.\n */\n get() {\n return this.#state;\n }\n\n observe() {\n return this.cell;\n }\n #set(patch) {\n this.#state = { ...this.#state, ...patch };\n this.cell.setValue(this.#state);\n }\n\n #top() {\n return this.#state.stack[this.#state.stack.length - 1];\n }\n /** The active file panel (top of the stack, if it's a file). */\n activeTab() {\n const t = this.#top();\n return t?.kind === 'file' ? t : null; // panel kind, not node kind\n }\n\n #applyStack(stack, { history = true } = {}) {\n const top = stack[stack.length - 1];\n const file = top && top.kind === 'file' ? top : null;\n this.#set({ stack, activeTabId: file ? file.id : null, activeFile: file ? file.node : null });\n if (history) this.#pushHistory();\n }\n\n /** Reset to the base launcher (used by showHome). */\n reset() {\n this.#applyStack([{ kind: 'search' }]);\n }\n\n /**\n * Open a file into the viewer stack. `reset` (used by the modal search) starts a\n * fresh stack (base search + this file). Opening a file already in the stack\n * jumps back to it; otherwise it's pushed on top.\n */\n openFile(node, openerId, { reset = false } = {}) {\n const panel = { kind: 'file', id: node.id, node, openerId };\n let stack;\n if (reset) {\n stack = [{ kind: 'search' }, panel];\n } else {\n const at = this.#state.stack.findIndex((p) => p.kind === 'file' && p.id === node.id);\n if (at >= 0) {\n // Already open — jump back to it, but adopt the (possibly new) opener so\n // reopening with a different one actually switches the viewer.\n stack = this.#state.stack.slice(0, at + 1);\n stack[at] = panel;\n } else {\n stack = [...this.#state.stack, panel];\n }\n }\n this.#pushRecent(node);\n this.#applyStack(stack);\n }\n back() {\n if (this.#state.stack.length <= 1) return;\n try { history.back(); } catch { this.pop(); }\n }\n pop() {\n if (this.#state.stack.length > 1) this.#applyStack(this.#state.stack.slice(0, -1), { history: false });\n }\n /**\n * The node is GONE — drop it from everywhere this service holds a copy.\n *\n * Named for what happened rather than for the stack, because it was `closeTab` and so\n * only closed the panel: a deleted file kept its recent tile, and clicking that tile\n * opened nothing. Recents are a snapshot, not a reference, so nothing else was ever\n * going to notice.\n *\n * Trashing is reversible and this is not, quite: restoring a file does not put it back\n * in recents, it just stops being listed until opened again. That is the right way\n * round — a tile that leads nowhere is worse than one that is missing.\n */\n forget(id) {\n const recents = this.#state.recents.filter((r) => r.id !== id);\n if (recents.length !== this.#state.recents.length) {\n this.#set({ recents });\n saveRecents(recents);\n }\n const stack = this.#state.stack.filter((p) => !(p.kind === 'file' && p.id === id));\n this.#applyStack(stack.length ? stack : [{ kind: 'search' }], { history: false });\n }\n /**\n * A node changed underneath us — a rename — so every copy of it here has to change.\n *\n * BOTH the stack and the recents list, because recents hold a SNAPSHOT (id, name,\n * contentType) rather than a reference: updating only the stack renamed the open panel's\n * title and left the recent tile showing the old name until it aged off the end of the\n * list, which reads as the rename half-failing.\n */\n updateTabNode(node) {\n const recents = this.#state.recents.map((r) => (r.id === node.id\n ? { ...r, name: node.name, contentType: node.contentType || r.contentType }\n : r));\n if (recents.some((r, i) => r !== this.#state.recents[i])) {\n this.#set({ recents });\n saveRecents(recents);\n }\n const stack = this.#state.stack.map((p) => (p.kind === 'file' && p.id === node.id ? { ...p, node } : p));\n this.#applyStack(stack, { history: false });\n }\n\n // --- history sync ----------------------------------------------------------\n #pushHistory(replace = false) {\n const top = this.#top();\n const n = top?.node;\n const entry = {\n troveDepth: this.#state.stack.length,\n node: n ? { id: n.id, name: n.name, contentType: n.contentType, collectionId: n.collectionId } : null,\n openerId: top?.openerId || null,\n };\n try { (replace ? history.replaceState : history.pushState).call(history, entry, ''); } catch { /* no history API */ }\n }\n /** Handle a browser back/forward: sync the stack depth (re-open on forward). */\n onPopState(e) {\n const s = e?.state || {};\n const depth = s.troveDepth || 1;\n if (depth <= this.#state.stack.length) {\n this.#applyStack(this.#state.stack.slice(0, depth), { history: false });\n } else if (s.node) {\n this.#applyStack([...this.#state.stack, { kind: 'file', id: s.node.id, node: s.node, openerId: s.openerId }], { history: false });\n }\n }\n\n #pushRecent(node) {\n if (!node) return;\n const entry = {
|
|
70
|
+
"// NavigationService — the main panel STACK and its browser-history mirror. The base\n// of the stack is the launcher (search); opening a file pushes a viewer panel; back\n// pops. The stack is mirrored into window.history (pushState/popState) so the browser\n// back/forward buttons navigate it. Also owns the \"recent files\" list. Extracted from\n// WorkbenchService; the workbench coordinates the couplings it can't own (setting the\n// activity to 'home' and closing the modal search when a file opens).\n\nimport { cell } from '../runtime.js';\nimport { thumbnailOf } from '../bl/fileType.js';\n\nconst RECENTS_KEY = 'trove.recents';\nconst RECENTS_MAX = 12;\n\nexport class NavigationService {\n #state;\n\n constructor() {\n this.#state = {\n stack: [{ kind: 'search' }], // [{kind:'search'}, {kind:'file', id, node, openerId}, …]\n activeTabId: null, // top file panel id (or null)\n activeFile: null, // top file panel node (or null)\n recents: loadRecents(),\n };\n this.cell = cell(this.#state);\n }\n\n /**\n * The value, for whoever is about to decide something from it.\n *\n * The same door every slice offers. Actions read `.state` and queries read `.cell`, and\n * the two are only equal by habit — bl/state.js says so, and says a resource has one\n * value and one way to read it. `state` is also a public field on a service, which is one\n * typo from `social.state.sidecar = null` bypassing the cell and notifying nothing.\n */\n get() {\n return this.#state;\n }\n\n observe() {\n return this.cell;\n }\n #set(patch) {\n this.#state = { ...this.#state, ...patch };\n this.cell.setValue(this.#state);\n }\n\n #top() {\n return this.#state.stack[this.#state.stack.length - 1];\n }\n /** The active file panel (top of the stack, if it's a file). */\n activeTab() {\n const t = this.#top();\n return t?.kind === 'file' ? t : null; // panel kind, not node kind\n }\n\n #applyStack(stack, { history = true } = {}) {\n const top = stack[stack.length - 1];\n const file = top && top.kind === 'file' ? top : null;\n this.#set({ stack, activeTabId: file ? file.id : null, activeFile: file ? file.node : null });\n if (history) this.#pushHistory();\n }\n\n /** Reset to the base launcher (used by showHome). */\n reset() {\n this.#applyStack([{ kind: 'search' }]);\n }\n\n /**\n * Open a file into the viewer stack. `reset` (used by the modal search) starts a\n * fresh stack (base search + this file). Opening a file already in the stack\n * jumps back to it; otherwise it's pushed on top.\n */\n openFile(node, openerId, { reset = false } = {}) {\n const panel = { kind: 'file', id: node.id, node, openerId };\n let stack;\n if (reset) {\n stack = [{ kind: 'search' }, panel];\n } else {\n const at = this.#state.stack.findIndex((p) => p.kind === 'file' && p.id === node.id);\n if (at >= 0) {\n // Already open — jump back to it, but adopt the (possibly new) opener so\n // reopening with a different one actually switches the viewer.\n stack = this.#state.stack.slice(0, at + 1);\n stack[at] = panel;\n } else {\n stack = [...this.#state.stack, panel];\n }\n }\n this.#pushRecent(node);\n this.#applyStack(stack);\n }\n back() {\n if (this.#state.stack.length <= 1) return;\n try { history.back(); } catch { this.pop(); }\n }\n pop() {\n if (this.#state.stack.length > 1) this.#applyStack(this.#state.stack.slice(0, -1), { history: false });\n }\n /**\n * The node is GONE — drop it from everywhere this service holds a copy.\n *\n * Named for what happened rather than for the stack, because it was `closeTab` and so\n * only closed the panel: a deleted file kept its recent tile, and clicking that tile\n * opened nothing. Recents are a snapshot, not a reference, so nothing else was ever\n * going to notice.\n *\n * Trashing is reversible and this is not, quite: restoring a file does not put it back\n * in recents, it just stops being listed until opened again. That is the right way\n * round — a tile that leads nowhere is worse than one that is missing.\n */\n forget(id) {\n const recents = this.#state.recents.filter((r) => r.id !== id);\n if (recents.length !== this.#state.recents.length) {\n this.#set({ recents });\n saveRecents(recents);\n }\n const stack = this.#state.stack.filter((p) => !(p.kind === 'file' && p.id === id));\n this.#applyStack(stack.length ? stack : [{ kind: 'search' }], { history: false });\n }\n /**\n * A node changed underneath us — a rename — so every copy of it here has to change.\n *\n * BOTH the stack and the recents list, because recents hold a SNAPSHOT (id, name,\n * contentType) rather than a reference: updating only the stack renamed the open panel's\n * title and left the recent tile showing the old name until it aged off the end of the\n * list, which reads as the rename half-failing.\n */\n updateTabNode(node) {\n const recents = this.#state.recents.map((r) => (r.id === node.id\n ? { ...r, name: node.name, contentType: node.contentType || r.contentType, ...(thumbnailOf(node) ? { thumbnail: thumbnailOf(node) } : {}) }\n : r));\n if (recents.some((r, i) => r !== this.#state.recents[i])) {\n this.#set({ recents });\n saveRecents(recents);\n }\n const stack = this.#state.stack.map((p) => (p.kind === 'file' && p.id === node.id ? { ...p, node } : p));\n this.#applyStack(stack, { history: false });\n }\n\n // --- history sync ----------------------------------------------------------\n #pushHistory(replace = false) {\n const top = this.#top();\n const n = top?.node;\n const entry = {\n troveDepth: this.#state.stack.length,\n node: n ? { id: n.id, name: n.name, contentType: n.contentType, collectionId: n.collectionId } : null,\n openerId: top?.openerId || null,\n };\n try { (replace ? history.replaceState : history.pushState).call(history, entry, ''); } catch { /* no history API */ }\n }\n /** Handle a browser back/forward: sync the stack depth (re-open on forward). */\n onPopState(e) {\n const s = e?.state || {};\n const depth = s.troveDepth || 1;\n if (depth <= this.#state.stack.length) {\n this.#applyStack(this.#state.stack.slice(0, depth), { history: false });\n } else if (s.node) {\n this.#applyStack([...this.#state.stack, { kind: 'file', id: s.node.id, node: s.node, openerId: s.openerId }], { history: false });\n }\n }\n\n #pushRecent(node) {\n if (!node) return;\n // The THUMBNAIL rides along, and it has to, because a recent entry is a snapshot\n // rather than a reference: nothing later re-reads the node, so a tile drawn from\n // this object sees whatever is stored here and nothing else. Without it a recently\n // opened book showed a generic icon while the very same file two rows below showed\n // its cover — the one difference being which group drew it.\n //\n // Only the descriptor, not the image. It is a range into the file (~80 bytes), so a\n // dozen of them is under a kilobyte of localStorage; storing the whole contribution\n // would put four kilobytes per book in there for no gain.\n const thumbnail = thumbnailOf(node);\n const entry = {\n id: node.id, name: node.name, contentType: node.contentType || '', collectionId: node.collectionId,\n ...(thumbnail ? { thumbnail } : {}),\n };\n const recents = [entry, ...this.#state.recents.filter((r) => r.id !== node.id)].slice(0, RECENTS_MAX);\n this.#set({ recents });\n saveRecents(recents);\n }\n}\n\nfunction loadRecents() {\n try { return JSON.parse(localStorage.getItem(RECENTS_KEY)) || []; } catch { return []; }\n}\nfunction saveRecents(recents) {\n try { localStorage.setItem(RECENTS_KEY, JSON.stringify(recents)); } catch { /* private mode / no storage */ }\n}\n",
|
|
70
71
|
"// SocialService — the client side of identity, conversations, tags, and mention\n// notifications. Reactive (the workbench `watch`es it): it holds the current\n// principal, the notification inbox (polled + refreshed on demand), and the\n// active file's sidecar (tags + threaded comments). It also owns the web-push\n// subscription flow (register the service worker, subscribe with the server's\n// VAPID key). All mutations optimistically reload the affected sidecar.\n\nimport { cell } from '../runtime.js';\n\nexport class SocialService {\n #state;\n\n constructor(platform, offline = null) {\n // How a comment or tag written while disconnected reaches the server later.\n this.offline = offline;\n this.platform = platform;\n this.api = platform.api;\n this.#state = {\n me: null,\n notifications: { items: [], unread: 0 },\n inboxOpen: false,\n pushSupported: 'serviceWorker' in navigator && 'PushManager' in window,\n pushEnabled: false,\n sidecar: null, // { nodeId, tags, comments, subscribers, loading, error }\n backlinks: null, // { nodeId, items, loading, error } — what links to the open item\n posting: false,\n replyTo: null, // { id, author } when composing a reply\n };\n this.cell = cell(this.#state);\n this._pollTimer = null;\n }\n\n /**\n * The value, for whoever is about to decide something from it.\n *\n * The same door every slice offers. Actions read `.state` and queries read `.cell`, and\n * the two are only equal by habit — bl/state.js says so, and says a resource has one\n * value and one way to read it. `state` is also a public field on a service, which is one\n * typo from `social.state.sidecar = null` bypassing the cell and notifying nothing.\n */\n get() {\n return this.#state;\n }\n\n observe() {\n return this.cell;\n }\n #set(patch) {\n this.#state = { ...this.#state, ...patch };\n this.cell.setValue(this.#state);\n }\n\n async init() {\n try {\n const me = await this.api.me();\n this.#set({ me: me.principal, admin: !!me.admin });\n } catch { /* anonymous / offline */ }\n await this.refreshNotifications();\n // Light polling; the service worker also nudges on push.\n this._pollTimer = setInterval(() => this.refreshNotifications(), 45_000);\n if (this._pollTimer.unref) this._pollTimer.unref();\n this.#detectPush();\n window.addEventListener('focus', () => this.refreshNotifications());\n navigator.serviceWorker?.addEventListener?.('message', (e) => {\n if (e.data?.type === 'trove-push') this.refreshNotifications();\n });\n }\n\n async refreshNotifications() {\n try {\n const n = await this.api.notifications();\n this.#set({ notifications: n });\n } catch { /* not enabled / offline */ }\n }\n\n toggleInbox(open) {\n const next = open ?? !this.#state.inboxOpen;\n this.#set({ inboxOpen: next });\n if (next && this.#state.notifications.unread) this.markAllRead();\n }\n async markAllRead() {\n try {\n await this.api.markNotificationsRead();\n this.#set({ notifications: { ...this.#state.notifications, unread: 0, items: this.#state.notifications.items.map((i) => ({ ...i, read: true })) } });\n } catch { /* ignore */ }\n }\n\n // --- sidecar (per active file) ---------------------------------------------\n\n async loadSidecar(nodeId) {\n if (!nodeId) return this.#set({ sidecar: null, backlinks: null });\n this.#set({ sidecar: { nodeId, loading: true, tags: [], comments: [], subscribers: [] } });\n this.loadBacklinks(nodeId);\n try {\n const view = await this.api.sidecar(nodeId);\n // A slower request for a previously-open item must not land on this one — the\n // same guard loadBacklinks already had. Without it, opening A then quickly opening\n // B let A resolve last, so `state.sidecar.nodeId` became A while B was on screen\n // and comment()/addTag()/removeTag() all wrote to A.\n if (this.#state.sidecar?.nodeId !== nodeId) return;\n this.#set({ sidecar: { ...view, loading: false } });\n } catch (err) {\n if (this.#state.sidecar?.nodeId !== nodeId) return;\n this.#set({ sidecar: { nodeId, loading: false, error: err.message, tags: [], comments: [] } });\n }\n }\n\n /**\n * What links to this item. With no folders, this is how you find out where an item\n * \"lives\" — which documents gather it up — so a failure has to be visible rather\n * than rendering as \"nothing links here\", which would be a claim about the drive.\n */\n async loadBacklinks(nodeId) {\n if (!nodeId) return this.#set({ backlinks: null });\n this.#set({ backlinks: { nodeId, items: [], loading: true, error: null } });\n try {\n const res = await this.api.backlinks(nodeId);\n // A slower request for a previously-open item must not land on this one.\n if (this.#state.backlinks?.nodeId !== nodeId) return;\n this.#set({ backlinks: { nodeId, items: res.items || [], loading: false, error: null } });\n } catch (err) {\n if (this.#state.backlinks?.nodeId !== nodeId) return;\n this.#set({ backlinks: { nodeId, items: [], loading: false, error: err.message } });\n }\n }\n async #reload() {\n if (this.#state.sidecar?.nodeId) await this.loadSidecar(this.#state.sidecar.nodeId);\n }\n\n setReplyTo(target) {\n this.#set({ replyTo: target });\n }\n async comment(body) {\n const nodeId = this.#state.sidecar?.nodeId;\n if (!nodeId || !body.trim()) return;\n const parentId = this.#state.replyTo?.id || null;\n // Offline → queue the op; it replays (CRDT-merges) on reconnect.\n if (this.offline && !this.offline.get().online) {\n await this.offline.queueOp({ method: 'POST', path: `/api/items/${encodeURIComponent(nodeId)}/comments`, body: { body, parentId } });\n this.#set({ replyTo: null });\n this.platform.notifications.info('Offline — your comment will post when you reconnect.');\n return;\n }\n this.#set({ posting: true });\n try {\n await this.api.addComment(nodeId, { body, parentId });\n this.#set({ replyTo: null });\n await this.#reload();\n } catch (err) {\n this.platform.notifications.error(`Couldn't post comment: ${err.message}`);\n } finally {\n this.#set({ posting: false });\n }\n }\n async deleteComment(cid) {\n const nodeId = this.#state.sidecar?.nodeId;\n await this.api.deleteComment(nodeId, cid).catch((e) => this.platform.notifications.error(e.message));\n await this.#reload();\n }\n async react(cid, emoji) {\n const nodeId = this.#state.sidecar?.nodeId;\n const comment = findComment(this.#state.sidecar?.comments || [], cid);\n const on = !(comment?.reactions?.[emoji] || []).includes(this.#state.me?.id);\n try {\n await this.api.reactComment(nodeId, cid, emoji, on);\n } catch (err) {\n this.platform.notifications.error(`Couldn't react: ${err.message}`);\n }\n await this.#reload();\n }\n async addTag(name, value) {\n const nodeId = this.#state.sidecar?.nodeId;\n if (!name.trim()) return;\n if (this.offline && !this.offline.get().online) {\n await this.offline.queueOp({ method: 'POST', path: `/api/items/${encodeURIComponent(nodeId)}/tags`, body: { name: name.trim(), value } });\n this.platform.notifications.info('Offline — tag will sync when you reconnect.');\n return;\n }\n await this.api.setTag(nodeId, name.trim(), value).catch((e) => this.platform.notifications.error(e.message));\n await this.#reload();\n }\n async removeTag(name) {\n const nodeId = this.#state.sidecar?.nodeId;\n // Offline → queue like addTag so the removal isn't silently lost.\n if (this.offline && !this.offline.get().online) {\n await this.offline.queueOp({ method: 'DELETE', path: `/api/items/${encodeURIComponent(nodeId)}/tags/${encodeURIComponent(name)}` });\n this.platform.notifications.info('Offline — tag removal will sync when you reconnect.');\n return;\n }\n try {\n await this.api.removeTag(nodeId, name);\n } catch (err) {\n this.platform.notifications.error(`Couldn't remove tag: ${err.message}`);\n }\n await this.#reload();\n }\n\n // --- web push --------------------------------------------------------------\n\n async #detectPush() {\n if (!this.#state.pushSupported) return;\n try {\n const reg = await navigator.serviceWorker.getRegistration();\n const sub = await reg?.pushManager?.getSubscription();\n this.#set({ pushEnabled: !!sub });\n } catch { /* ignore */ }\n }\n\n async enablePush() {\n if (!this.#state.pushSupported) {\n this.platform.notifications.warn('Push notifications are not supported in this browser.');\n return;\n }\n try {\n const { publicKey } = await this.api.vapidKey();\n if (!publicKey) {\n this.platform.notifications.warn('This server has no VAPID key configured for web push.');\n return;\n }\n const reg = await navigator.serviceWorker.register('/sw.js');\n await navigator.serviceWorker.ready;\n const perm = await Notification.requestPermission();\n if (perm !== 'granted') return this.platform.notifications.info('Notifications permission was denied.');\n const sub = await reg.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlBase64ToUint8Array(publicKey) });\n await this.api.subscribePush(sub.toJSON());\n this.#set({ pushEnabled: true });\n this.platform.notifications.success('Notifications enabled — you’ll be pinged when someone @mentions you.');\n } catch (err) {\n this.platform.notifications.error(`Couldn't enable notifications: ${err.message}`);\n }\n }\n}\n\nfunction findComment(list, cid) {\n for (const c of list) {\n if (c.id === cid) return c;\n const inner = findComment(c.replies || [], cid);\n if (inner) return inner;\n }\n return null;\n}\n\nfunction urlBase64ToUint8Array(base64) {\n const padding = '='.repeat((4 - (base64.length % 4)) % 4);\n const b64 = (base64 + padding).replace(/-/g, '+').replace(/_/g, '/');\n const raw = atob(b64);\n const out = new Uint8Array(raw.length);\n for (let i = 0; i < raw.length; i++) out[i] = raw.charCodeAt(i);\n return out;\n}\n",
|
|
71
72
|
"// EmbeddingProvider — turns text into vectors. Pluggable so deployments choose\n// their model/cost tradeoff. Two are bundled:\n// - LocalHashEmbedding: zero-dependency, offline, deterministic. A hashed\n// bag-of-bigrams projected to a fixed dim and L2-normalised. Not as good as\n// a real model, but makes semantic search work out of the box and in tests.\n// - HttpEmbedding: POSTs to any OpenAI-compatible /embeddings endpoint (OpenAI,\n// Ollama, LM Studio, a self-hosted model). This is the production path.\n// Both expose `dimensions` and `embed(texts) -> number[][]`.\n\nimport { withRetry } from '../retry.js';\nimport { TroveError, wrapError } from '../errors.js';\n\nexport class EmbeddingProvider {\n get dimensions() {\n return 0;\n }\n /** @param {string[]} texts @returns {Promise<number[][]>} */\n async embed(texts) {\n throw TroveError.unsupported('embed not implemented');\n }\n async embedOne(text) {\n return (await this.embed([text]))[0];\n }\n}\n\nconst STOP = new Set('a an the of to in on for and or is are be as at by with from this that it'.split(' '));\n\nfunction tokenize(text) {\n return String(text)\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, ' ')\n .split(/\\s+/)\n .filter((t) => t.length > 1 && !STOP.has(t));\n}\n\n// FNV-1a → 32-bit, used to bucket features into vector dims.\nfunction fnv(str) {\n let h = 2166136261;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n}\n\nexport class LocalHashEmbedding extends EmbeddingProvider {\n constructor({ dimensions = 256 } = {}) {\n super();\n this._dim = dimensions;\n }\n get dimensions() {\n return this._dim;\n }\n async embed(texts) {\n return texts.map((t) => this.#vec(t));\n }\n #vec(text) {\n const v = new Float64Array(this._dim);\n const tokens = tokenize(text);\n // Unigrams + bigrams give a little word-order sensitivity.\n const feats = [...tokens];\n for (let i = 0; i < tokens.length - 1; i++) feats.push(tokens[i] + '_' + tokens[i + 1]);\n for (const f of feats) {\n const h = fnv(f);\n const idx = h % this._dim;\n const sign = (h >> 31) & 1 ? -1 : 1; // signed hashing reduces collisions\n v[idx] += sign;\n }\n // L2 normalise so dot product == cosine similarity.\n let norm = 0;\n for (let i = 0; i < v.length; i++) norm += v[i] * v[i];\n norm = Math.sqrt(norm) || 1;\n return Array.from(v, (x) => x / norm);\n }\n}\n\nexport class HttpEmbedding extends EmbeddingProvider {\n /**\n * @param {object} cfg\n * @param {string} cfg.url e.g. https://api.openai.com/v1/embeddings\n * @param {string} [cfg.apiKey]\n * @param {string} [cfg.model] e.g. text-embedding-3-small\n * @param {number} cfg.dimensions the model's output dim (must match your index)\n * @param {number} [cfg.batchSize]\n */\n constructor(cfg) {\n super();\n if (!cfg?.url || !cfg?.dimensions) throw TroveError.invalid('HttpEmbedding requires url and dimensions');\n this.cfg = cfg;\n }\n get dimensions() {\n return this.cfg.dimensions;\n }\n async embed(texts) {\n const batchSize = this.cfg.batchSize ?? 64;\n const out = [];\n for (let i = 0; i < texts.length; i += batchSize) {\n const batch = texts.slice(i, i + batchSize);\n out.push(...(await this.#embedBatch(batch)));\n }\n return out;\n }\n async #embedBatch(batch) {\n return withRetry(async () => {\n let res;\n try {\n res = await fetch(this.cfg.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(this.cfg.apiKey ? { authorization: `Bearer ${this.cfg.apiKey}` } : {}),\n },\n body: JSON.stringify({ model: this.cfg.model, input: batch }),\n });\n } catch (err) {\n throw wrapError(err);\n }\n if (res.status === 429 || res.status >= 500) {\n throw TroveError.transient(`Embedding endpoint ${res.status}`);\n }\n if (!res.ok) throw TroveError.internal(`Embedding endpoint failed: ${res.status}`);\n const json = await res.json();\n // OpenAI shape: { data: [{ embedding: [...] }, ...] }\n const data = json.data ?? json.embeddings ?? [];\n return data.map((d) => d.embedding ?? d);\n });\n }\n}\n",
|
|
72
73
|
"// IndexerRegistry — server-side indexers that extract structured content from\n// files. An indexer declares which nodes it handles and, for each, produces a\n// *contribution* with up to three scopes:\n// - semanticTexts: text chunks that become embeddings + keyword entries (search)\n// - tags: filterable key/values (merged into the node's queryable tags)\n// - metadata: arbitrary structured data (e.g. an audiobook's chapter index)\n// Everything is namespaced under the indexer's `id`, so indexers never clobber one\n// another and an indexer's whole contribution can be removed independently.\n//\n// This complements *plugin* indexers, which run in the browser sandbox and push\n// the same contribution shape through the API under their own namespace.\n//\n// Two built-ins ship here: a text/markdown extractor (the reference indexer) and a\n// links extractor, which is what makes a drive with no folders navigable.\n\nimport { extname } from '../util.js';\nimport { extractTroveLinks } from '../links.js';\nimport { LINKS_CONTRIBUTOR, LINKS_KEY } from '../metadata/interface.js';\n\n/**\n * @typedef {object} Indexer\n * @property {string} id unique namespace\n * @property {string} [displayName]\n * @property {(node: object) => boolean} match\n * @property {(node: object, ctx: IndexContext) => Promise<Contribution>} index\n *\n * @typedef {object} Contribution\n * @property {Doc[]} [semanticTexts] text chunks → embeddings + keyword search\n * @property {object} [tags] filterable key/values, e.g. { language: 'en' }\n * @property {object} [metadata] arbitrary structured data, e.g. { chapters: [...] }\n *\n * @typedef {object} Doc\n * @property {string} [id] stable per (node, chunk); defaults to `${node.id}:${i}`\n * @property {string} text\n * @property {object} [fields] e.g. { title, page, chapter }\n *\n * @typedef {object} IndexContext\n * @property {() => Promise<Uint8Array>} readBytes\n * @property {() => Promise<string>} readText\n * @property {number} maxBytes\n */\n\nexport class IndexerRegistry {\n /** @param {{builtins?: boolean}} [opts] register the reference text indexer (default on) */\n constructor({ builtins = true } = {}) {\n this.indexers = new Map();\n if (builtins) {\n this.register(textIndexer);\n this.register(linksIndexer);\n }\n }\n register(indexer) {\n if (!indexer?.id || typeof indexer.index !== 'function') {\n throw new Error('Indexer requires an id and an index() function');\n }\n this.indexers.set(indexer.id, indexer);\n // Only unregister if THIS registration is still the live one. Indexer ids are\n // contribution URIs, which are account-independent, so a second account installing\n // the same package replaces the first's entry — and the first's stale closure then\n // deleted the second's, taking that account's indexer out of the drive-wide registry\n // and purging its contributions.\n return () => { if (this.indexers.get(indexer.id) === indexer) this.indexers.delete(indexer.id); };\n }\n unregister(id) {\n this.indexers.delete(id);\n }\n /**\n * The redacted view — what `/api/indexers` answers with. Deliberately not the indexer\n * itself: an indexer holds a `match` and an `index` that runs plugin code, and neither\n * belongs in a response.\n */\n list() {\n return [...this.indexers.values()].map((i) => ({ id: i.id, displayName: i.displayName || i.id }));\n }\n\n /**\n * The LIVE indexer, for a caller that means to run it — `backfillIndexer` after an\n * install, which needs the real `match` and `index` that `list()` strips.\n */\n get(id) { return this.indexers.get(id) || null; }\n matching(node) {\n return [...this.indexers.values()].filter((i) => {\n try {\n return i.match(node);\n } catch {\n return false;\n }\n });\n }\n}\n\n// --- Reference indexer: plain text / markdown / code ------------------------\n\nconst TEXT_EXTS = new Set([\n '.txt', '.md', '.markdown', '.rst', '.log', '.csv', '.tsv',\n '.json', '.yaml', '.yml', '.toml', '.ini', '.env',\n '.js', '.mjs', '.ts', '.jsx', '.tsx', '.py', '.rb', '.go', '.rs', '.java',\n '.c', '.h', '.cpp', '.css', '.html', '.xml', '.sh',\n]);\n\nfunction isTexty(node) {\n if (node.contentType?.startsWith('text/')) return true;\n return TEXT_EXTS.has(extname(node.name));\n}\n\nexport const textIndexer = {\n id: 'core.text',\n displayName: 'Text & code',\n match: isTexty,\n async index(node, ctx) {\n const text = await ctx.readText();\n if (!text.trim()) return { semanticTexts: [] };\n const chunks = chunkText(text, 1200, 200);\n // Fields describe the CHUNK (which chunk it is), not the node. The node's name\n // deliberately isn't copied in: field values are indexed, so a name duplicated\n // across every chunk goes stale the moment the item is renamed — leaving the file\n // findable under a name it no longer has. Name search belongs to the `core.name`\n // index, which is a single document and is refreshed on rename.\n const semanticTexts = chunks.map((chunk, i) => ({\n id: `${node.id}:${i}`,\n text: chunk,\n fields: { chunk: i },\n }));\n return {\n semanticTexts,\n metadata: { chars: text.length, chunks: chunks.length, excerpt: text.slice(0, 280) },\n };\n },\n};\n\n// --- Links indexer: what this item points at --------------------------------\n//\n// With no folder hierarchy, an item's place in the drive is defined by what links to\n// it. This indexer records the outbound `trove:` URIs found in an item's text, which\n// is what MetadataStore.findLinksTo reads to answer the inverse question — \"what\n// gathers this up?\" — for the backlinks panel.\n//\n// It stores the links as `metadata`, not `semanticTexts`: a URI is an edge, not prose,\n// and embedding it would only pollute semantic results. `links` is also surfaced as a\n// tag count so `#links > 0` finds the documents that act as indexes.\n\nexport const linksIndexer = {\n id: LINKS_CONTRIBUTOR,\n displayName: 'Links',\n match: isTexty,\n async index(node, ctx) {\n const text = await ctx.readText();\n const links = extractTroveLinks(text).map((l) => l.uri);\n return {\n metadata: { [LINKS_KEY]: links },\n tags: { links: links.length },\n };\n },\n};\n\n/** Split into overlapping windows on sentence/line boundaries where possible. */\nexport function chunkText(text, size, overlap) {\n const out = [];\n let i = 0;\n while (i < text.length) {\n let end = Math.min(i + size, text.length);\n if (end < text.length) {\n // Prefer to break at a paragraph/sentence boundary within the last 25%.\n const window = text.slice(i, end);\n const brk = Math.max(window.lastIndexOf('\\n\\n'), window.lastIndexOf('. '), window.lastIndexOf('\\n'));\n if (brk > size * 0.75) end = i + brk + 1;\n }\n out.push(text.slice(i, end).trim());\n if (end >= text.length) break;\n i = end - overlap;\n }\n return out.filter(Boolean);\n}\n",
|
|
@@ -80,7 +81,7 @@
|
|
|
80
81
|
"// One instance per logical query.\n//\n// ngin shares a live query realization by INSTANCE identity — its controller map is keyed on\n// the object, and neither the class nor the fields are consulted. That is fine for a query\n// with no arguments, which can be a module singleton. It is a trap for a parameterised one:\n// `new MediaUrl('n1')` in two places is two realizations of the same question, so two minted\n// URLs and two leases for one file, and nothing fails to say so.\n//\n// So a parameterised query declares a shared factory and is asked for, not constructed:\n//\n// class MediaUrl extends ViewQuery {\n// static of = queryOf(MediaUrl);\n// constructor(nodeId) { ... }\n// }\n//\n// MediaUrl.of('n1') // same id, same instance, one realization\n//\n// A field holding a factory rather than a base class or a mixin, which is what makes this\n// small: the query keeps whatever base it already had, each factory closes over its own\n// table, and there is no name resolved through a prototype chain for anything to shadow.\n\n/**\n * Eviction, without a policy to get wrong.\n *\n * Entries are weak, and a finalizer sweeps the key once the instance is collected. That is\n * sound because LIVENESS PINS THE INSTANCE: ngin's controller map is a plain Map holding the\n * query as a key, deleted only on teardown, so a query with observers is strongly reachable\n * and cannot be collected. An idle one can be, and re-asking simply builds a fresh instance.\n *\n * The alternative — an LRU with a cap — is actively wrong here: evicting a LIVE entry means\n * the next `of()` mints a second instance while the first is still running, which is the\n * exact bug this exists to prevent, arriving on a timer.\n *\n * (This leans on ngin's default controller map being strong. `hooks.createQueryControllersMap`\n * could replace it with a weak one; we do not, and a weak one would break this.)\n */\nconst sweeper = new FinalizationRegistry(({ table, key }) => {\n // Only if it is still the dead entry — a fresh instance may have claimed the key already.\n if (table.get(key) && !table.get(key).deref()) table.delete(key);\n});\n\n/**\n * Reject anything a canonical key cannot capture.\n *\n * A function stringifies to `undefined` in JSON, so two queries taking different callbacks\n * would key identically and silently share one realization — the very bug this exists to\n * prevent, reintroduced by the fix. Fail at the call site instead. A query with arguments\n * like that passes its own key function and never comes through here.\n */\nfunction assertKeyable(value, path) {\n const t = typeof value;\n if (value === null || t === 'string' || t === 'number' || t === 'boolean') return;\n if (t !== 'object') {\n throw new TypeError(\n `Query argument ${path} is a ${t}, which cannot be part of a sharing key. ` +\n 'Pass an id and let the query look the thing up, or give queryOf a key function.',\n );\n }\n if (Array.isArray(value)) return value.forEach((v, i) => assertKeyable(v, `${path}[${i}]`));\n const proto = Object.getPrototypeOf(value);\n if (proto === Object.prototype || proto === null) {\n return Object.entries(value).forEach(([k, v]) => assertKeyable(v, `${path}.${k}`));\n }\n throw new TypeError(\n `Query argument ${path} is a ${value.constructor?.name ?? 'non-plain object'}, which ` +\n 'cannot be part of a sharing key. Pass an id and let the query look the thing up, ' +\n 'or give queryOf a key function.',\n );\n}\n\n/** A canonical string for a value: object keys sorted, so `{a,b}` and `{b,a}` are one key. */\nexport function stableKey(value) {\n if (value === null || typeof value !== 'object') return JSON.stringify(value) ?? 'null';\n if (Array.isArray(value)) return `[${value.map(stableKey).join(',')}]`;\n return `{${Object.keys(value).sort().map((k) => `${JSON.stringify(k)}:${stableKey(value[k])}`).join(',')}}`;\n}\n\n/** The default key: every argument, in order, canonically. Types count, so 1 and '1' differ. */\nexport function keyOfArgs(...args) {\n args.forEach((a, i) => assertKeyable(a, `#${i}`));\n return args.map(stableKey).join('|');\n}\n\n/**\n * A factory returning the shared instance of `Class` for a given argument list.\n *\n * class Thing extends ViewQuery { static of = queryOf(Thing); }\n *\n * `key` defaults to the arguments, canonically. Pass one to share more coarsely than the\n * arguments do — an option that changes how something is displayed but not what is fetched\n * should not split one realization into two — or to key arguments the default refuses:\n *\n * static of = queryOf(Thing, (nodeId, opts) => nodeId);\n *\n * A key rather than a hash plus a comparator: a comparator only earns its complexity when\n * keys can collide, and a canonical key does not collide.\n *\n * The class is captured, so a subclass inheriting this field would build the PARENT —\n * `Sub.of('x')` returning a `Base` is the sort of wrong that reads as right. The factory is\n * a plain function rather than an arrow so that `this` is the class it was reached through,\n * and it refuses to run when that is not the class it was built for. A subclass that wants\n * sharing declares its own `static of`.\n *\n * A detached call — `const of = Thing.of; of('x')` — has no receiver at all, and in a module\n * `this` is `undefined` rather than the global. That is the ordinary way to pass the factory\n * around, so it is allowed; only a DIFFERENT class is an error.\n *\n * @param {Function} Class the query class, referenced from inside its own body\n * @param {(...args: any[]) => string} [key]\n */\nexport function queryOf(Class, key = keyOfArgs) {\n const table = new Map();\n return function of(...args) {\n if (this !== undefined && this !== Class) {\n throw new TypeError(\n `${this?.name ?? 'A subclass'}.of() would build a ${Class.name}, because \\`of\\` ` +\n `captures the class it was declared on. Give ${this?.name ?? 'the subclass'} its own ` +\n '`static of = queryOf(...)`, or call it on ' + Class.name + ' directly.',\n );\n }\n const k = key(...args);\n const existing = table.get(k)?.deref();\n if (existing) return existing;\n const instance = new Class(...args);\n table.set(k, new WeakRef(instance));\n sweeper.register(instance, { table, key: k });\n return instance;\n };\n}\n",
|
|
81
82
|
"// Ranking what someone typed against a list of things.\n//\n// There were two of these, for one question. The command palette scored per matched\n// character and added 10 for a contiguous substring; the launcher's `!` mode returned\n// `1000 - index` for a substring and a flat 1 otherwise. So typing the same three letters\n// ranked the same commands differently depending on which way you had reached them — and\n// the launcher's version could not distinguish two commands that both merely contained the\n// letters, because every non-substring match scored exactly 1.\n//\n// Neither was wrong so much as unaware of the other. Ranking is a decision about the\n// drive's own vocabulary, so it belongs here, once.\n\n/**\n * How well `hay` matches `term`. 0 means no match at all.\n *\n * Subsequence first — the letters must appear in order, which is what makes \"cmp\" find\n * \"Command Palette\". Then three things push a better match up:\n *\n * - a contiguous substring beats scattered letters, by a lot\n * - an earlier hit beats a later one, so typing \"set\" prefers \"Settings\" to \"Reset\"\n * - adjacent letters beat gaps, which is the difference between \"op\" matching \"Open\" and\n * matching \"Only Photographs\"\n *\n * @param {string} hay already lowercased\n * @param {string} term already lowercased and trimmed\n */\nexport function matchScore(hay, term) {\n if (!term) return 1;\n let score = 0;\n let from = 0;\n for (const ch of term) {\n const at = hay.indexOf(ch, from);\n if (at < 0) return 0; // not a subsequence — not a match\n score += at === from ? 3 : 1; // adjacency is worth more than mere presence\n from = at + 1;\n }\n const sub = hay.indexOf(term);\n if (sub >= 0) {\n // A contiguous run is the strongest signal there is, and the earlier it starts the\n // more likely it is what was meant.\n score += 100 - Math.min(50, sub);\n }\n return score;\n}\n\n/**\n * Commands matching `term`, best first.\n *\n * The haystack is \"category title\" because someone typing \"view\" means the View category\n * as readily as they mean a command with View in its name.\n *\n * @param {Array<{id: string, title: string, category?: string}>} commands\n * @param {string} term what was typed, without any leading `!`\n * @param {number} [limit]\n */\nexport function rankCommands(commands, term, limit = 60) {\n const q = (term || '').trim().toLowerCase();\n const all = commands || [];\n if (!q) return all.slice(0, limit);\n const scored = [];\n for (const c of all) {\n const s = matchScore(`${c.category || ''} ${c.title}`.toLowerCase(), q);\n if (s > 0) scored.push([s, c]);\n }\n // Ties break by title, so a list that cannot decide is at least stable rather than\n // ordered by whatever registered first.\n return scored\n .sort((a, b) => b[0] - a[0] || String(a[1].title).localeCompare(String(b[1].title)))\n .slice(0, limit)\n .map(([, c]) => c);\n}\n",
|
|
82
83
|
"// What the drive is doing and how full it is — one answer, for every surface that says so.\n//\n// This lived in the status bar and was imported from there by the phone chrome, which is\n// how it was already admitting to being shared: two shells rendering the same facts in\n// different shapes. It is a derivation over four resources, so it belongs here, and it is\n// reached as the `statusFacts` query rather than recomputed per render.\n//\n// The reason it has to be derived ONCE rather than twice is on the record: the phone bar\n// rendered `collectionId` raw and showed an opaque `col_…` where the desktop bar showed the\n// collection's name — the same fact, said two ways, because each surface worked it out.\n\n/**\n * The facts every shell reports.\n *\n * @param {{ex: object, tr: object, act: object, off: object}} slices\n */\nexport function statusFactsOf({ ex = {}, tr = {}, act = {}, off = {} } = {}) {\n const items = ex.items || [];\n const tasks = act.tasks || [];\n return {\n // `null` with nothing open — `collectionLabelOf` renders that as \"no collection\". The\n // old fallback made the bar name a collection that may not exist, on a drive where the\n // user had not yet chosen one.\n collectionId: ex.collectionId ?? null,\n // What to CALL it, so the phone shell and the desktop bar cannot end up saying\n // different things.\n collectionLabel: collectionLabelOf(ex),\n // The COLLECTION's totals when the server could give them, not the page's. Summing what\n // happens to be loaded reports a 3,000-file drive as 500 files — a wrong number, not a\n // rounded one. Falls back to the page only when the server didn't say.\n totalItems: ex.stats?.items ?? items.length,\n // Whether that total is the COLLECTION's or just the page we happen to hold. With more\n // pages waiting, the page length is a floor, not a total, and must read as one.\n totalKnown: ex.stats?.items != null,\n totalBytes: ex.stats?.bytes ?? items.reduce((n, i) => n + (i.size || 0), 0),\n shown: items.length,\n partial: !!ex.nextCursor,\n usage: ex.usage ?? null,\n usageLevel: usageLevelOf(ex.usage),\n uploading: (tr.items || []).filter((t) => t.status === 'active'),\n running: tasks.filter((t) => t.status === 'running'),\n issues: act.issues || [],\n off: { online: true, pins: [], queued: 0, syncing: false, ...off },\n };\n}\n\n/** The open collection's name, or the plainest true thing when there isn't one. */\nexport function collectionLabelOf(ex) {\n if (!ex?.collectionId) return 'no collection';\n const match = (ex.collections || []).find((c) => c.id === ex.collectionId);\n return match?.name || ex.collectionId;\n}\n\n/**\n * How worried to be about space, or '' when there is nothing to say.\n *\n * A filesystem or NAS can answer exactly, and that is where it matters: a disk fills up and\n * every upload starts failing with no warning that anything was coming. An object store has\n * no equivalent number, so this answers '' and the meter is not drawn at all rather than\n * being drawn meaninglessly.\n *\n * The thresholds are a judgement about when someone still has time to act, which is why\n * they are here and not in whichever bar happens to be on screen.\n */\nexport function usageLevelOf(usage) {\n if (!usage?.total) return '';\n const free = usage.available / usage.total;\n return free < 0.05 ? 'critical' : free < 0.1 ? 'low' : '';\n}\n\n/**\n * The one thing worth saying about the drive right now, most urgent first.\n *\n * The phone has room for a single glyph, so something has to decide what outranks what:\n * being offline beats a standing problem, a standing problem beats work in progress, and\n * anything beats running low on space. That ordering is a claim about which condition a\n * person most needs to know, which makes it a decision rather than a rendering.\n *\n * Answers a KIND, not an icon. Which glyph draws a kind is the shell's business.\n */\nexport function driveConditionOf(facts) {\n const f = facts || {};\n if (!f.off?.online) return { kind: 'offline', label: 'Offline' };\n if (f.issues?.length) {\n return {\n kind: 'issues',\n label: `${f.issues.length} need${f.issues.length === 1 ? 's' : ''} attention`,\n count: f.issues.length,\n };\n }\n if (f.running?.length || f.uploading?.length || f.off?.syncing) {\n return { kind: 'working', label: 'Working…', count: (f.running?.length || 0) + (f.uploading?.length || 0) };\n }\n if (f.usageLevel) return { kind: 'lowSpace', label: 'Low on space' };\n return { kind: 'idle', label: 'Status' };\n}\n",
|
|
83
|
-
"// What the launcher is showing.\n//\n// This was ~100 lines inside the launcher COMPONENT, deciding — mid-render, where nothing\n// else could see it — which nodes are on screen, what each heading says, whether \"All\n// items\" is a lie because another page is waiting, and what the empty state should read\n// when a load FAILED as against when the drive is genuinely empty. Every one of those is a\n// question about engine state.\n//\n// It also made a smaller thing impossible: `pickView` needs the nodes on screen, and while\n// they were assembled in a render they looked like render-layer data. They are not — they\n// come from the explorer and search resources. Deriving them here is what lets the choice\n// of view become engine state too.\n//\n// Groups are DATA. A header control is `{ icon, label, title, actions }`, not a button —\n// the launcher used to put a rendered vnode in `group.action`, which is the same\n// carrying-a-handle problem that menu items had before they carried `actions`.\n\nimport { parseTagQuery, filterLabel } from './tagQuery.js';\nimport { iconForKind } from './fileType.js';\nimport {\n ExecCommandAction, CloseSearchModalAction, OpenFileAction, SearchAction, FilterAction,\n SetLaunchQueryAction,\n} from './actions.js';\n\n/** Which mode the typed query puts the launcher in. */\nexport function launcherMode(query) {\n const q = query || '';\n return q.startsWith('!') ? 'command' : q.includes('#') ? 'filter' : 'search';\n}\n\n/**\n * Everything you can do to a file, as descriptions.\n *\n * `pinned` and `keys` are resolved by the caller because both are questions about engine\n * state: whether THIS file is already available offline, and what the shortcut for a\n * command actually is on this machine. Hardcoding \"⌘⇧L\" told a Windows user about a key\n * they do not have, and told everyone the default even after they had rebound it.\n */\nexport function fileMenuOf(node, { pinned = false, keys = {} } = {}) {\n const kbd = (id) => keys[id] || undefined;\n return [\n { label: 'Open', icon: 'file-text', actions: [new ExecCommandAction('explorer.open', node)] },\n { label: 'Download', icon: 'download', actions: [new ExecCommandAction('explorer.download', node)] },\n // Labelled by destination rather than by format: one goes in a document, the other\n // goes to a person.\n { label: 'Copy shareable link', icon: 'link', actions: [new ExecCommandAction('explorer.copyShareLink')] },\n { label: 'Copy trove: link', icon: 'link', kbd: kbd('explorer.copyLink'), actions: [new ExecCommandAction('explorer.copyLink')] },\n { sep: true },\n { label: 'Rename…', actions: [new ExecCommandAction('explorer.rename')] },\n pinned\n ? { label: 'Remove from offline', icon: 'close', actions: [new ExecCommandAction('offline.unpin', node)] }\n : { label: 'Make available offline', icon: 'download', actions: [new ExecCommandAction('offline.pin', node)] },\n { sep: true },\n { label: 'Move to trash', icon: 'trash', danger: true, kbd: kbd('explorer.delete'), actions: [new ExecCommandAction('explorer.delete')] },\n ];\n}\n\n/** What you can do to something already in the trash. */\nexport function trashMenuOf(node) {\n return [\n { label: 'Restore', icon: 'refresh', actions: [new ExecCommandAction('explorer.restore', node.id)] },\n { sep: true },\n { label: 'Delete forever', icon: 'trash', danger: true, actions: [new ExecCommandAction('explorer.purgeOne', node.id)] },\n ];\n}\n\n/**\n * One row for a file.\n *\n * `menu` stays a thunk. A drive can have hundreds of rows on screen and almost none of\n * their menus are ever opened, so building them all would be work nobody asked for — and a\n * pure function deferring pure work is data as much as the array it would have returned.\n */\nfunction fileItem(node, { modal, pinnedIds, keys }) {\n return {\n icon: iconForKind(node),\n title: node.name,\n detail: node.contentType || '',\n node,\n // From the modal search, `reset` starts a fresh viewer stack; then close it.\n actions: [\n new OpenFileAction(node, { reset: !!modal }),\n ...(modal ? [new CloseSearchModalAction()] : []),\n ],\n menu: () => fileMenuOf(node, { pinned: pinnedIds.has(node.id), keys }),\n };\n}\n\n/**\n * The groups on screen.\n *\n * @param {object} s the slices this reads, already plain\n * @param {boolean} modal whether this is the double-shift overlay rather than the home\n * screen — the one input that is genuinely about which INSTANCE is rendering, since both\n * are on screen at once when the overlay is up\n */\nexport function launcherGroupsOf(s, modal = false) {\n const { ex = {}, se = {}, nav = {}, query = '', commandMatches = [], pinnedIds = new Set(), keys = {} } = s;\n const mode = launcherMode(query);\n const row = (node) => fileItem(node, { modal, pinnedIds, keys });\n const closeModal = modal ? [new CloseSearchModalAction()] : [];\n\n if (mode === 'command') {\n return [{\n id: 'commands',\n title: 'Commands',\n items: commandMatches.map((c) => ({\n icon: 'command', title: c.title, detail: c.category, badge: 'command',\n actions: [new ExecCommandAction(c.id), ...closeModal],\n })),\n empty: 'No matching commands.',\n }];\n }\n\n const { text, filters } = parseTagQuery(query);\n const nodes = (se.results || []).map((r) => r.node);\n const err = se.error;\n // A one-click retry so a transient search/filter failure isn't a dead end.\n const retry = (actions) => (err ? [{ icon: 'refresh', label: 'Retry', title: 'Retry', actions }] : []);\n\n // Drive-wide tag/property filter (server-side), optionally narrowed by free text.\n if (filters.length) {\n const label = filters.map(filterLabel).join(' ') + (text.trim() ? ` · \"${text.trim()}\"` : '');\n return [{\n id: 'filtered',\n title: se.loading ? 'Filtering…' : err ? 'Filter failed' : 'Filtered',\n // Shown as typed: a tag is a value, not a heading.\n verbatim: se.loading || err ? null : label,\n controls: retry([new FilterAction(filters, text)]),\n items: nodes.map(row),\n empty: se.loading ? 'Filtering…' : err ? `Couldn’t filter: ${err}` : 'No files match those filters.',\n }];\n }\n\n // Free-text search.\n if (text.trim()) {\n return [{\n id: 'results',\n title: se.loading ? 'Searching…' : err ? 'Search failed' : 'Results',\n controls: retry([new SearchAction(query)]),\n items: nodes.map(row),\n empty: se.loading ? 'Searching…' : err ? `Couldn’t search: ${err}` : 'No files match.',\n }];\n }\n\n // Home: recents, then everything in the collection. There is nothing to descend into —\n // this is the \"show me everything\" fallback for when search isn't the answer.\n const groups = [];\n const recents = (nav.recents || []).map(row);\n if (recents.length) groups.push({ id: 'recent', title: 'Recent', items: recents });\n\n const shown = (ex.items || []).length;\n // `stats` is the collection; `items` is the page. When the server didn't report stats we\n // only know the page — and saying \"500\" while a next page exists is a claim about the\n // drive that is false, so say \"500+\" instead.\n const knownTotal = ex.stats?.items ?? null;\n const total = knownTotal ?? shown;\n const totalLabel = knownTotal != null ? knownTotal.toLocaleString() : `${shown.toLocaleString()}+`;\n const items = (ex.items || []).map(row);\n // A partial list must not be titled \"All items\" — that is a claim about the drive, and on\n // a collection bigger than one page it is false. Say what is on screen, and offer the rest\n // rather than leaving it unreachable.\n if (ex.nextCursor) {\n items.push({\n icon: 'refresh',\n title: ex.loadingMore ? 'Loading…'\n : knownTotal != null ? `Show more (${(knownTotal - shown).toLocaleString()} more)` : 'Show more',\n detail: 'or search to jump straight to something',\n actions: [new ExecCommandAction('explorer.loadMore')],\n });\n }\n\n // The trash, when it has been opened. Not shown by default: it is a place you go to\n // recover a mistake, not part of browsing the drive.\n if (ex.trash) {\n groups.push({\n id: 'trash',\n // One line, not two: a header reading \"0 items\" above a body reading \"the trash is\n // empty\" is the same sentence twice, permanently parked above the drive.\n title: ex.trash.length\n ? `Trash · ${ex.trash.length} item${ex.trash.length === 1 ? '' : 's'}`\n : 'Trash',\n controls: [\n ...(ex.trash.length\n ? [{ icon: 'trash', label: 'Empty trash', title: 'Destroy everything in the trash', actions: [new ExecCommandAction('explorer.emptyTrash')] }]\n : []),\n // The way back out. Opening the trash used to be one-way until a page reload.\n { icon: 'close', label: 'Close', title: 'Hide the trash', actions: [new ExecCommandAction('explorer.hideTrash')] },\n ],\n items: (ex.trash || []).map((n) => ({\n icon: 'trash',\n title: n.name,\n detail: `deleted ${new Date(n.deletedAt).toLocaleString()} — restore`,\n actions: [new ExecCommandAction('explorer.restore', n.id)],\n menu: () => trashMenuOf(n),\n })),\n empty: 'The trash is empty.',\n });\n }\n\n groups.push({\n id: 'all',\n title: ex.nextCursor ? `All items · showing ${shown.toLocaleString()} of ${totalLabel}` : 'All items',\n // The empty state told people to upload a file, and on desktop and TV there was nothing\n // anywhere that would let them. (Phone has the + in its bottom bar.)\n controls: modal ? [] : [{ icon: 'upload', label: 'Upload', title: 'Upload files to this collection', actions: [new ExecCommandAction('explorer.upload')] }],\n items,\n // Don't show a false \"empty\" when the load actually FAILED (e.g. server unreachable) —\n // say so, so the user knows to retry rather than believing the collection is empty. (A\n // toast also fires, but the persistent state must be honest.)\n empty: ex.loading ? 'Loading…' : ex.error ? `Couldn’t load this collection: ${ex.error}` : 'Nothing here yet — upload a file to get started.',\n });\n return groups;\n}\n\n/**\n * The suggestions shown when a search came back with nothing.\n *\n * Two halves, both settled by the `launcherContent` query: whether an offer applies at all\n * — a search ran, it succeeded, it found nothing — and what to suggest, which the server\n * decides and reaches the engine through the `capabilities` resource. Each example carries\n * the actions that run it, so the component only draws them.\n */\nexport function searchHelpOf({ eligible = false, caps = null } = {}) {\n if (!eligible) return null;\n const p = caps?.searchPrompt;\n if (!p?.hint && !p?.examples?.length) return null;\n return {\n hint: p.hint || null,\n examples: (p.examples || []).map((ex) => {\n const { text, filters } = parseTagQuery(ex.query);\n return {\n query: ex.query,\n label: ex.label || null,\n // Running an example is the same two steps as typing it: put it in the box, then\n // ask whichever of search or filter that spelling means.\n actions: [\n new SetLaunchQueryAction(ex.query),\n filters.length ? new FilterAction(filters, text) : new SearchAction(text),\n ],\n };\n }),\n };\n}\n",
|
|
84
|
+
"// What the launcher is showing.\n//\n// This was ~100 lines inside the launcher COMPONENT, deciding — mid-render, where nothing\n// else could see it — which nodes are on screen, what each heading says, whether \"All\n// items\" is a lie because another page is waiting, and what the empty state should read\n// when a load FAILED as against when the drive is genuinely empty. Every one of those is a\n// question about engine state.\n//\n// It also made a smaller thing impossible: `pickView` needs the nodes on screen, and while\n// they were assembled in a render they looked like render-layer data. They are not — they\n// come from the explorer and search resources. Deriving them here is what lets the choice\n// of view become engine state too.\n//\n// Groups are DATA. A header control is `{ icon, label, title, actions }`, not a button —\n// the launcher used to put a rendered vnode in `group.action`, which is the same\n// carrying-a-handle problem that menu items had before they carried `actions`.\n\nimport { parseTagQuery, filterLabel } from './tagQuery.js';\nimport { iconForKind } from './fileType.js';\nimport {\n ExecCommandAction, CloseSearchModalAction, OpenFileAction, SearchAction, FilterAction,\n SetLaunchQueryAction,\n} from './actions.js';\n\n/** Which mode the typed query puts the launcher in. */\nexport function launcherMode(query) {\n const q = query || '';\n return q.startsWith('!') ? 'command' : q.includes('#') ? 'filter' : 'search';\n}\n\n/**\n * Does this mode put FILES on screen?\n *\n * Asked because a view is a way of drawing files, so anything that decides \"can the user\n * switch views\" has to know whether files are what is being shown. `!` lists commands —\n * there is no second way to draw a command, and offering a grid/list toggle over them\n * says the results are something they are not.\n *\n * Expressed as a question about the mode rather than a check for `'command'` at the call\n * site, so a future mode that lists something else is handled here, once.\n */\nexport function modeShowsItems(mode) {\n return mode !== 'command';\n}\n\n/**\n * Everything you can do to a file, as descriptions.\n *\n * `pinned` and `keys` are resolved by the caller because both are questions about engine\n * state: whether THIS file is already available offline, and what the shortcut for a\n * command actually is on this machine. Hardcoding \"⌘⇧L\" told a Windows user about a key\n * they do not have, and told everyone the default even after they had rebound it.\n */\nexport function fileMenuOf(node, { pinned = false, keys = {} } = {}) {\n const kbd = (id) => keys[id] || undefined;\n return [\n { label: 'Open', icon: 'file-text', actions: [new ExecCommandAction('explorer.open', node)] },\n { label: 'Download', icon: 'download', actions: [new ExecCommandAction('explorer.download', node)] },\n // Labelled by destination rather than by format: one goes in a document, the other\n // goes to a person.\n { label: 'Copy shareable link', icon: 'link', actions: [new ExecCommandAction('explorer.copyShareLink')] },\n { label: 'Copy trove: link', icon: 'link', kbd: kbd('explorer.copyLink'), actions: [new ExecCommandAction('explorer.copyLink')] },\n { sep: true },\n { label: 'Rename…', actions: [new ExecCommandAction('explorer.rename')] },\n pinned\n ? { label: 'Remove from offline', icon: 'close', actions: [new ExecCommandAction('offline.unpin', node)] }\n : { label: 'Make available offline', icon: 'download', actions: [new ExecCommandAction('offline.pin', node)] },\n { sep: true },\n { label: 'Move to trash', icon: 'trash', danger: true, kbd: kbd('explorer.delete'), actions: [new ExecCommandAction('explorer.delete')] },\n ];\n}\n\n/** What you can do to something already in the trash. */\nexport function trashMenuOf(node) {\n return [\n { label: 'Restore', icon: 'refresh', actions: [new ExecCommandAction('explorer.restore', node.id)] },\n { sep: true },\n { label: 'Delete forever', icon: 'trash', danger: true, actions: [new ExecCommandAction('explorer.purgeOne', node.id)] },\n ];\n}\n\n/**\n * One row for a file.\n *\n * `menu` stays a thunk. A drive can have hundreds of rows on screen and almost none of\n * their menus are ever opened, so building them all would be work nobody asked for — and a\n * pure function deferring pure work is data as much as the array it would have returned.\n */\nfunction fileItem(node, { modal, pinnedIds, keys }) {\n return {\n icon: iconForKind(node),\n title: node.name,\n detail: node.contentType || '',\n node,\n // From the modal search, `reset` starts a fresh viewer stack; then close it.\n actions: [\n new OpenFileAction(node, { reset: !!modal }),\n ...(modal ? [new CloseSearchModalAction()] : []),\n ],\n menu: () => fileMenuOf(node, { pinned: pinnedIds.has(node.id), keys }),\n };\n}\n\n/**\n * The groups on screen.\n *\n * @param {object} s the slices this reads, already plain\n * @param {boolean} modal whether this is the double-shift overlay rather than the home\n * screen — the one input that is genuinely about which INSTANCE is rendering, since both\n * are on screen at once when the overlay is up\n */\nexport function launcherGroupsOf(s, modal = false) {\n const { ex = {}, se = {}, nav = {}, query = '', commandMatches = [], pinnedIds = new Set(), keys = {} } = s;\n const mode = launcherMode(query);\n const row = (node) => fileItem(node, { modal, pinnedIds, keys });\n const closeModal = modal ? [new CloseSearchModalAction()] : [];\n\n if (mode === 'command') {\n return [{\n id: 'commands',\n title: 'Commands',\n items: commandMatches.map((c) => ({\n icon: 'command', title: c.title, detail: c.category, badge: 'command',\n actions: [new ExecCommandAction(c.id), ...closeModal],\n })),\n empty: 'No matching commands.',\n }];\n }\n\n const { text, filters } = parseTagQuery(query);\n const nodes = (se.results || []).map((r) => r.node);\n const err = se.error;\n // A one-click retry so a transient search/filter failure isn't a dead end.\n const retry = (actions) => (err ? [{ icon: 'refresh', label: 'Retry', title: 'Retry', actions }] : []);\n\n // Drive-wide tag/property filter (server-side), optionally narrowed by free text.\n if (filters.length) {\n const label = filters.map(filterLabel).join(' ') + (text.trim() ? ` · \"${text.trim()}\"` : '');\n return [{\n id: 'filtered',\n title: se.loading ? 'Filtering…' : err ? 'Filter failed' : 'Filtered',\n // Shown as typed: a tag is a value, not a heading.\n verbatim: se.loading || err ? null : label,\n controls: retry([new FilterAction(filters, text)]),\n items: nodes.map(row),\n empty: se.loading ? 'Filtering…' : err ? `Couldn’t filter: ${err}` : 'No files match those filters.',\n }];\n }\n\n // Free-text search.\n if (text.trim()) {\n return [{\n id: 'results',\n title: se.loading ? 'Searching…' : err ? 'Search failed' : 'Results',\n controls: retry([new SearchAction(query)]),\n items: nodes.map(row),\n empty: se.loading ? 'Searching…' : err ? `Couldn’t search: ${err}` : 'No files match.',\n }];\n }\n\n // Home: recents, then everything in the collection. There is nothing to descend into —\n // this is the \"show me everything\" fallback for when search isn't the answer.\n const groups = [];\n const recents = (nav.recents || []).map(row);\n if (recents.length) groups.push({ id: 'recent', title: 'Recent', items: recents });\n\n const shown = (ex.items || []).length;\n // `stats` is the collection; `items` is the page. When the server didn't report stats we\n // only know the page — and saying \"500\" while a next page exists is a claim about the\n // drive that is false, so say \"500+\" instead.\n const knownTotal = ex.stats?.items ?? null;\n const total = knownTotal ?? shown;\n const totalLabel = knownTotal != null ? knownTotal.toLocaleString() : `${shown.toLocaleString()}+`;\n const items = (ex.items || []).map(row);\n // A partial list must not be titled \"All items\" — that is a claim about the drive, and on\n // a collection bigger than one page it is false. Say what is on screen, and offer the rest\n // rather than leaving it unreachable.\n if (ex.nextCursor) {\n items.push({\n icon: 'refresh',\n title: ex.loadingMore ? 'Loading…'\n : knownTotal != null ? `Show more (${(knownTotal - shown).toLocaleString()} more)` : 'Show more',\n detail: 'or search to jump straight to something',\n actions: [new ExecCommandAction('explorer.loadMore')],\n });\n }\n\n // The trash, when it has been opened. Not shown by default: it is a place you go to\n // recover a mistake, not part of browsing the drive.\n if (ex.trash) {\n groups.push({\n id: 'trash',\n // One line, not two: a header reading \"0 items\" above a body reading \"the trash is\n // empty\" is the same sentence twice, permanently parked above the drive.\n title: ex.trash.length\n ? `Trash · ${ex.trash.length} item${ex.trash.length === 1 ? '' : 's'}`\n : 'Trash',\n controls: [\n ...(ex.trash.length\n ? [{ icon: 'trash', label: 'Empty trash', title: 'Destroy everything in the trash', actions: [new ExecCommandAction('explorer.emptyTrash')] }]\n : []),\n // The way back out. Opening the trash used to be one-way until a page reload.\n { icon: 'close', label: 'Close', title: 'Hide the trash', actions: [new ExecCommandAction('explorer.hideTrash')] },\n ],\n items: (ex.trash || []).map((n) => ({\n icon: 'trash',\n title: n.name,\n detail: `deleted ${new Date(n.deletedAt).toLocaleString()} — restore`,\n actions: [new ExecCommandAction('explorer.restore', n.id)],\n menu: () => trashMenuOf(n),\n })),\n empty: 'The trash is empty.',\n });\n }\n\n groups.push({\n id: 'all',\n title: ex.nextCursor ? `All items · showing ${shown.toLocaleString()} of ${totalLabel}` : 'All items',\n // The empty state told people to upload a file, and on desktop and TV there was nothing\n // anywhere that would let them. (Phone has the + in its bottom bar.)\n controls: modal ? [] : [{ icon: 'upload', label: 'Upload', title: 'Upload files to this collection', actions: [new ExecCommandAction('explorer.upload')] }],\n items,\n // Don't show a false \"empty\" when the load actually FAILED (e.g. server unreachable) —\n // say so, so the user knows to retry rather than believing the collection is empty. (A\n // toast also fires, but the persistent state must be honest.)\n empty: ex.loading ? 'Loading…' : ex.error ? `Couldn’t load this collection: ${ex.error}` : 'Nothing here yet — upload a file to get started.',\n });\n return groups;\n}\n\n/**\n * The suggestions shown when a search came back with nothing.\n *\n * Two halves, both settled by the `launcherContent` query: whether an offer applies at all\n * — a search ran, it succeeded, it found nothing — and what to suggest, which the server\n * decides and reaches the engine through the `capabilities` resource. Each example carries\n * the actions that run it, so the component only draws them.\n */\nexport function searchHelpOf({ eligible = false, caps = null } = {}) {\n if (!eligible) return null;\n const p = caps?.searchPrompt;\n if (!p?.hint && !p?.examples?.length) return null;\n return {\n hint: p.hint || null,\n examples: (p.examples || []).map((ex) => {\n const { text, filters } = parseTagQuery(ex.query);\n return {\n query: ex.query,\n label: ex.label || null,\n // Running an example is the same two steps as typing it: put it in the box, then\n // ask whichever of search or filter that spelling means.\n actions: [\n new SetLaunchQueryAction(ex.query),\n filters.length ? new FilterAction(filters, text) : new SearchAction(text),\n ],\n };\n }),\n };\n}\n",
|
|
84
85
|
"// Which of the registered views should draw the results.\n//\n// The reactive half — which views exist, their when-clauses, which one the user pinned —\n// is the `views` query. This is the rest: arithmetic over the items on screen.\n//\n// Still a plain function rather than part of that query only because the launcher assembles\n// the items mid-render. They are themselves derived from the explorer and search state, so\n// this folds into a query as soon as that assembly does.\n//\n// It lived in ui/components/views/index.js, which was half a job: the registry reads moved\n// into the engine and the DECISION stayed in the render layer. Choosing a layout from what\n// a collection contains is a claim about the drive, not about markup.\n\n/** Where a pinned view choice is remembered. */\nexport const SETTING = 'explorer.view';\n\n/**\n * The view to draw with, in order of how much someone meant it.\n *\n * 1. A saved choice — they pressed a button. Nothing infers its way past that.\n * 2. The search transformer's hint, when there is a search on screen. It read the\n * sentence: \"photos from the trip last summer\" is a request for a gallery as much as\n * it is a query, and nothing downstream can recover that from a list of content types.\n * 3. A view whose `match` suits what is actually there — a collection of photographs\n * opens as a grid without anyone asking.\n * 4. The highest priority, which is the list.\n *\n * A hint naming a view this build doesn't have is ignored, not an error: the transformer\n * is deployment configuration and may outlive the build it was written against.\n *\n * PURE. It used to take `platform` and read the contribution registry, the context keys and\n * the settings mid-render — three reads that nothing invalidated on, so the launcher only\n * kept up because the shell's snapshot was coarse enough to redraw it anyway. The reactive\n * half is the `views` query now; what is left is arithmetic over the items already on\n * screen, which is the one input that cannot be a query (there is no sensible key for \"these\n * forty search results\").\n *\n * @param {{views: Array, saved: string|null}} slice from the `views` query\n * @param {Array} items the rows being drawn, `{ node }`-shaped\n * @param {string|null} hint the search transformer's suggestion, if this is a search\n */\nexport function pickView({ views = [], saved = null } = {}, items = [], hint = null) {\n if (!views.length) return null;\n const chosen = saved && views.find((v) => v.id === saved);\n if (chosen) return chosen;\n const suggested = hint && views.find((v) => v.id === hint);\n if (suggested) return suggested;\n const nodes = items.map((i) => i.node).filter(Boolean);\n if (nodes.length >= 3) {\n const suits = (v) => v.match && Object.keys(v.match).length\n && nodes.filter((n) => matchesView(v, n)).length / nodes.length > 0.6;\n const fitted = views.find(suits);\n if (fitted) return fitted;\n }\n return views[0];\n}\n\nfunction matchesView(view, node) {\n const ct = node.contentType || '';\n const name = (node.name || '').toLowerCase();\n const ext = name.includes('.') ? name.slice(name.lastIndexOf('.')) : '';\n if ((view.match.ext || []).includes(ext)) return true;\n return (view.match.mime || []).some((m) => (m.endsWith('/*') ? ct.startsWith(m.slice(0, -1)) : ct === m));\n}\n",
|
|
85
86
|
"// The drive's state, as engine queries.\n//\n// The web layer grew a second reactive system beside the engine: services holding cells, a\n// `platform` bag of subsystems, an `app` bag of stores, and one derived snapshot threaded\n// through every component. ngin already had all of it — see queries.js in the package:\n// `QueryController` is \"one live realization of a query instance, shared by all of its\n// observers\", `boot`/`kill` bracket a query's life, and a lease holds the providers it needs\n// for exactly that long.\n//\n// That move is DONE. The state bags became slices (see bl/state.js) and most of these\n// queries now view a slice rather than wrapping a service — which is why the base class is\n// `CellQuery`: one cell, viewed, whatever is behind it. `ViewQuery` is the other shape,\n// composing several cells into an answer the UI actually asks for.\n//\n// Four resources stayed services because they cover something a state bag cannot — history\n// and recents, polling, a queue that replays on reconnect — and they answer `get()` and\n// `observe()` like everything else, so a query cannot tell which it is looking at.\n//\n// INSTANCE IDENTITY IS THE SHARING KEY. ngin keys live realizations by the query INSTANCE —\n// `#controllers` is a Map keyed on the object — and nothing anywhere looks at the class or\n// the fields. So `new Explorer()` twice is two realizations, two boots and two subscriptions\n// to the same underlying cell, quietly, because nothing fails.\n//\n// Two instances carrying the SAME arguments are still two instances. `new MediaUrl('n1')`\n// twice mints two URLs and holds two leases for one file. That is the trap, and \"remember to\n// memoise\" is not a defence: forgetting is silent, and it is the parameterised queries —\n// exactly the ones worth sharing — that need it.\n//\n// So a parameterised query declares `static of = queryOf(TheClass)` and is asked for rather\n// than constructed: the same arguments give back the same instance, which makes identity\n// mean logical equality and lets both ngin's cache and watchQuery's work. See bl/intern.js.\n// Parameterless queries are exported as singletons below. Either way the CLASSES stay\n// private to this module and only instances leave it — which is also what stops anyone\n// calling `new` on a shared query and quietly getting a second realization.\n\nimport { Query } from '@3sln/ngin';\nimport { queryOf } from './intern.js';\nimport { selectedNodesOf, draftScopesOf, collectionMenuOf, collectionAdminOf } from './services.js';\nimport {\n ExecCommandAction, LoadSidecarAction, ClearSidecarAction, LoadRotationAction, LoadGrantsAction,\n LoadApiKeysAction, ShowCollectionAccessAction,\n} from './actions.js';\nimport { ASSOC_KEY, describeOpener } from './openers.js';\nimport { rankCommands } from './match.js';\nimport { statusFactsOf, driveConditionOf } from './status.js';\nimport { launcherGroupsOf, launcherMode, searchHelpOf } from './launcher.js';\nimport { pickView } from './views.js';\nimport { prettyKey } from '../platform/keybindings.js';\n\n/**\n * A live query over ONE cell — whatever holds it.\n *\n * Named for what it does rather than for what used to be behind it: most of these view a\n * slice now, not a service, and `ServiceQuery` told a reader its dep was a service when\n * usually it is not. `ViewQuery` below is the other shape, composing several cells.\n *\n * The resource exposes dodo's Cell protocol — `onDirty(fn)` to learn it changed,\n * `getValue()` to read it — and a query wants push. Bridging is two lines, so rather than\n * write them per resource this takes the cell as a function of the leased one.\n *\n * It reads the CELL and nothing else. That is not a stylistic preference: `settings`' cell\n * holds `effective()`, the defaults merged with the overrides, which no field anywhere\n * holds. Reading the cell is what makes these queries and the shell's snapshot describe the\n * same state rather than two subtly different ones.\n */\nclass CellQuery extends Query {\n /**\n * @param {string} dep the engine resource this views\n * @param {(resource: object) => {onDirty: Function, getValue: Function}} cellOf\n */\n /** Empty at the class level; the lease is per instance — see `deps` below. */\n static deps = [];\n\n /**\n * @param {string} dep the engine resource this views\n * @param {(resource: object) => {onDirty: Function, getValue: Function}} cellOf\n * @param {(value: any, resource: object) => any} [project] shape the value into a view\n * @param {{bootAction?: object}} [opts] dispatched when the first observer arrives — for\n * a value that has to be FETCHED before there is anything to view.\n */\n constructor(dep, cellOf, project, { bootAction = null } = {}) {\n super();\n this.dep = dep;\n this.cellOf = cellOf;\n this.project = project;\n if (bootAction) this.bootAction = bootAction;\n }\n\n /**\n * Leased per instance rather than per class, because these all share one class and each\n * views a different resource. ngin leases `constructor.deps` AND `this.deps`, so an\n * instance can name its own.\n */\n get deps() {\n return [this.dep, 'appState'];\n }\n\n boot(resources, { notify }) {\n const cell = this.cellOf(resources[this.dep]);\n // A service may not exist in every build — `plugins` is absent when the plugin host is\n // not installed, which is why the snapshot has a `?? constant([])` beside it.\n if (!cell) {\n notify(null);\n return;\n }\n const resource = resources[this.dep];\n const read = () => (this.project ? this.project(cell.getValue(), resource) : cell.getValue());\n // The current value first: a subscriber that arrives after the last change should not\n // wait for the next one to find out what is true now.\n notify(read());\n hold(resources, this, cell.onDirty(() => notify(read())));\n }\n\n kill(resources) {\n release(resources, this);\n }\n}\n\n/**\n * Where a live query keeps its subscription.\n *\n * NOT on the query. These instances are module-level singletons, interned so that the same\n * arguments give back the same object — which is what makes ngin share one realization per\n * engine. Writing `this.off` on a shared instance is therefore writing per-REALIZATION\n * state onto something that outlives any one of them: two engines observing the same\n * instance boot it twice, the second overwrites the first's unsubscribe, and killing either\n * releases the wrong one while the other leaks.\n *\n * `appState` is a provider, so it is per engine; keyed by the instance, an entry is per\n * (engine, instance) — which is exactly one realization. The query stays a description of\n * what to watch, and nothing about it changes when it is being watched.\n */\nfunction hold(resources, query, off) {\n resources.appState.set(query, off);\n}\n\nfunction release(resources, query) {\n const off = resources.appState?.get(query);\n if (Array.isArray(off)) off.forEach((fn) => fn());\n else off?.();\n resources.appState?.delete(query);\n}\n\n// --- the drive -----------------------------------------------------------------\n\n/**\n * Items, selection, the open collection, and the gate — plus the nodes the selection\n * actually refers to.\n *\n * `selectedNodes` is folded in rather than left as something to call, because resolving it\n * is not trivial: ids alone only match the loaded page of the current collection, and the\n * launcher's rows come from search across every readable one. A view that hands over the\n * answer is the difference between a component knowing what is selected and a component\n * knowing how selection resolution works.\n */\nexport const explorer = new CellQuery('explorer', (r) => r.observe(), (v) => ({\n ...v,\n selectedNodes: selectedNodesOf(v),\n // The collection switcher's rows. In the view because it is a question about state, and\n // because the component that shows it could not otherwise see where it came from.\n collectionMenu: collectionMenuOf(v,\n (id) => new ExecCommandAction('collections.switch', id),\n () => new ExecCommandAction('collections.create')),\n // The administration screen's view of the same collections: what each is on, whether it\n // is sealed, and what may be done to it.\n collectionAdmin: collectionAdminOf(v, {\n open: (id) => new ExecCommandAction('collections.switch', id),\n scan: () => new ExecCommandAction('workbench.scanCollection'),\n rotate: () => new ExecCommandAction('workbench.openSettings'),\n create: () => new ExecCommandAction('collections.create'),\n access: (id) => new ShowCollectionAccessAction(id),\n }),\n}));\n/** Query text, results, and the palette's file list. */\nexport const search = new CellQuery('search', (r) => r.observe());\n/** Uploads and downloads in flight. */\nexport const transfers = new CellQuery('transfers', (r) => r.observe());\n/** Running tasks and standing issues, both sides of the wire. */\nexport const activity = new CellQuery('activity', (r) => r.observe());\n/** Conversations, tags and backlinks for the open item. */\nexport const social = new CellQuery('social', (r) => r.observe());\n/**\n * Online state, pinned files, and the queue waiting to sync.\n *\n * `pinnedIds` is folded in so a component can ask whether THIS file is pinned without\n * calling a method on the service to find out. A Set rather than a repeated scan: the\n * question is asked once per row.\n */\nexport const offline = new CellQuery('offline', (r) => r.observe(),\n (v) => ({ ...v, pinnedIds: new Set((v?.pins || []).map((p) => p.id)) }));\n/**\n * The open collection's key, and any rotation running over it.\n *\n * Keyed by collection, so switching collections is a different query rather than a change\n * to notice. `bootAction` loads it when the settings screen first looks — the alternative,\n * which the API-keys section still does, is to dispatch from inside a render behind a\n * module-level \"have I asked yet\" flag, which is a render with a side effect.\n *\n * It POLLS while a rotation is running, because the work is happening on the server and\n * there is nothing to push. The interval belongs to the realization: it starts when\n * somebody looks and stops when they look away, so a settings screen nobody has open costs\n * nothing.\n */\nexport const rotationFor = (collectionId) => RotationView.of(collectionId);\n\nclass RotationView extends Query {\n static deps = ['rotation', 'appState', 'engine'];\n static of = queryOf(RotationView);\n\n constructor(collectionId) {\n super();\n this.collectionId = collectionId;\n // The id is PASSED, so the load stops depending on `explorer` happening to agree with\n // the query's key — which is what makes the key mean anything at all.\n this.bootAction = new LoadRotationAction(collectionId);\n }\n\n boot(r, { notify }) {\n const cell = r.rotation.observe();\n notify(cell.getValue());\n const off = cell.onDirty(() => notify(cell.getValue()));\n const timer = setInterval(() => {\n if (r.rotation.get().rotation?.status === 'running') r.engine.dispatch(new LoadRotationAction(this.collectionId));\n }, 2500);\n hold(r, this, [off, () => clearInterval(timer)]);\n }\n\n kill(r) {\n release(r, this);\n }\n}\n/**\n * Who may do what on one collection.\n *\n * Keyed by collection and loaded by `bootAction`, the same shape as `rotationFor` above —\n * it loads when an administrator opens the row and stops mattering when they close it.\n * No polling: an ACL only changes when somebody changes it, and the action that does so\n * reloads.\n */\nexport const grantsFor = (collectionId) => GrantsView.of(collectionId);\n\nclass GrantsView extends Query {\n static deps = ['acl', 'appState'];\n static of = queryOf(GrantsView);\n\n constructor(collectionId) {\n super();\n this.collectionId = collectionId;\n this.bootAction = new LoadGrantsAction(collectionId);\n }\n\n boot(r, { notify }) {\n const cell = r.acl.observe();\n notify(cell.getValue());\n hold(r, this, cell.onDirty(() => notify(cell.getValue())));\n }\n\n kill(r) {\n release(r, this);\n }\n}\n\n/**\n * The admin API-key list, with the unsubmitted draft resolved into what it would grant.\n *\n * `bootAction`, like `rotationFor` and `grantsFor`: it loads when the settings region is\n * first realized and the list is admin-only, so most sessions never ask. The alternative\n * was what this section used to do — dispatch from inside a render behind a module-level\n * \"have I asked yet\" flag, which is a render with a side effect, and module state the\n * engine cannot see or reset. A second `createWorkbench` on the page (a documented\n * embedding entry point) found the flag already true against a fresh slice and never\n * loaded at all.\n */\nexport const apiKeys = new CellQuery('apiKeys', (r) => r.observe(),\n (v) => ({ ...v, draftScopes: draftScopesOf(v) }),\n { bootAction: new LoadApiKeysAction() });\n\n// --- the shell -----------------------------------------------------------------\n\n/** Which activity is showing, and the rest of the shell's own state. */\nexport const workbench = new CellQuery('workbench', (r) => r.observe());\n/** The tab and panel stack. */\nexport const navigation = new CellQuery('navigation', (r) => r.observe());\n/** Dialogs, menus and panels. */\nexport const overlay = new CellQuery('overlay', (r) => r.observe());\n/** Toasts. */\nexport const notifications = new CellQuery('notifications', (r) => r.observe());\n/** Settings, defaults merged with overrides. */\nexport const settings = new CellQuery('settings', (r) => r.observe());\n/**\n * The settings SCHEMA, grouped by category, for the screen that edits them.\n *\n * Separate from `settings` rather than folded in, because that one emits the effective\n * values keyed by setting name — adding a `groups` key to it would put a made-up entry in\n * among the real ones.\n */\nexport const settingsGroups = new CellQuery('settings', (r) => r.observe(), (_v, r) => r.grouped());\n\n/** The when-clause keys: what is selected, what is open, what is focused. */\nexport const context = new CellQuery('context', (r) => r.observe());\n/** Phone, desktop or TV. */\nexport const viewport = new CellQuery('viewport', (r) => r.observe());\n/**\n * Whether this browser can transcribe on-device, and whether it is listening now.\n *\n * `canListen` is folded in: it is a question about the state, so a component should not\n * have to call the service to find out.\n */\nexport const voice = new CellQuery('voice', (r) => r.observe(),\n (v, r) => ({ ...v, canListen: !!r.canListen?.() }));\n/** Installed plugins; null where the plugin host is not installed. */\nexport const plugins = new CellQuery('plugins', (r) => r?.observe?.());\n/** What the UI is in the middle of doing: drafts, captures, ticked boxes. See viewState.js. */\nexport const viewState = new CellQuery('viewState', (r) => r.observe());\n\n// --- view queries ---------------------------------------------------------------\n//\n// The ones above hand a service's state through unchanged. These COMPOSE: they answer a\n// question the UI actually asks, in plain renderable data, with every decision already made.\n//\n// The rule, and it is the important one: a query emits a VIEW, never a handle. A list of\n// commands is a list of descriptions — id, title, whether it is enabled right now — not the\n// command objects, and never a `run` function. Interaction goes the other way, as an action\n// carrying the thing's id. So a component renders what it is given and dispatches an id; it\n// does not reach into a service to find out whether to draw something, and it cannot reach\n// into one to make something happen.\n//\n// That is what takes `platform` out of the components. The status bar used to ask\n// `context.evaluate(item.when)` and `plugins.isAvailable(item)` per item, mid-render, which\n// is why it needed the bag at all. Those are view decisions; they belong on this side.\n\n/**\n * A query composed from several services rather than passed through from one.\n *\n * `sources` names the cells whose changes should recompute it; `project` builds the value.\n * Split apart because what a view DEPENDS on is usually wider than what it reads from —\n * the palette's command list changes when a contribution is registered, but also when a\n * context key flips, because that is what decides `enabled`.\n */\nclass ViewQuery extends Query {\n static deps = [];\n\n /**\n * @param {string[]} deps the engine resources this composes\n * @param {(r: object) => Array<{onDirty: Function}>} sources\n * @param {(r: object) => any} project must return plain data — see the note above\n */\n constructor(deps, sources, project) {\n super();\n this.deps = [...deps, 'appState'];\n this.sources = sources;\n this.project = project;\n }\n\n boot(r, { notify }) {\n const emit = () => notify(this.project(r));\n emit();\n hold(r, this, this.sources(r).filter(Boolean).map((c) => c.onDirty(emit)));\n }\n\n kill(r) {\n release(r, this);\n }\n}\n\n/** Contributions, context keys and plugin health — what most of these views depend on. */\nconst REGISTRY_DEPS = ['contributions', 'context', 'plugins', 'settings', 'commands', 'keybindings'];\nconst registries = (r) => [\n r.contributions.observe(),\n r.context.observe(),\n r.plugins?.observe?.(),\n r.settings.observe(),\n];\n\n/**\n * The command palette's list: every palette command, with its keybinding label resolved\n * and `enabled` already decided.\n *\n * No `when` expression and no handler. A component shows the title, greys out what is\n * disabled, and dispatches `ExecCommandAction(id)`.\n */\nfunction paletteCommandsOf(r) {\n return r.commands.paletteCommands().map((c) => ({\n id: c.id,\n title: c.title ?? c.id,\n category: c.category ?? null,\n icon: c.icon ?? null,\n keybinding: r.keybindings.labelFor(c.id),\n // Only `available` — the plugin behind this command being reachable. There was an\n // `enabled` beside it, under a paragraph explaining that collapsing the two would tag a\n // context-disabled command as \"offline\", and the code made the distinction impossible:\n // `paletteCommands()` has already dropped every when-clause failure, so for every row\n // that survives, `isEnabled` re-evaluates the same clause against the same registry and\n // agrees with `isAvailable` by construction. Nothing rendered it. If greying a gated\n // command out with a reason is wanted, do the other half — stop filtering in\n // `paletteCommands()` — rather than keeping the label for a state that cannot occur.\n available: r.commands.isAvailable(c),\n }));\n}\n\n// The same list, narrowed to what was typed.\n//\n// Ranking used to happen mid-render, in two components, with two different algorithms (see\n// bl/match.js). The typed term is engine state — the palette's lives in the overlay — so\n// this is an ordinary query with no arguments, and the ranking is settled before a\n// component sees anything. The launcher's `!` mode ranks the same way inside\n// `launcherContent`, which already holds everything it needs.\nconst OVERLAY_DEPS = [...REGISTRY_DEPS, 'overlay', 'workbench'];\nconst withShell = (r) => [...registries(r), r.workbench.observe(), r.overlay.observe()];\n\n/** What the command palette should list right now. */\nexport const paletteMatches = new ViewQuery(OVERLAY_DEPS, withShell, (r) =>\n rankCommands(paletteCommandsOf(r), r.overlay.get().palette?.query || ''));\n\n\n/**\n * Plugin-contributed status bar slots, already filtered to the ones that should show.\n *\n * `when` and availability are resolved here rather than in the render, which is the whole\n * reason the status bar had to carry `platform` at all. `html` is still untrusted plugin\n * markup and is still sanitised at the point it becomes nodes — a query emitting plain data\n * says nothing about that data being safe.\n */\nexport const statusItems = new ViewQuery(REGISTRY_DEPS, registries, (r) => {\n return r.contributions.ofType('statusItem')\n .filter((i) => i.visible !== false && i.html)\n .filter((i) => !i.when || r.context.evaluate(i.when))\n .filter((i) => r.plugins?.isAvailable?.(i) ?? true)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0) || String(a.name).localeCompare(String(b.name)))\n .map((i) => ({\n id: i.id,\n slot: i.slot === 'left' ? 'left' : 'right',\n html: i.html,\n tooltip: i.tooltip ?? null,\n command: i.command ?? null,\n }));\n});\n\n/**\n * The effective keybindings, for the settings view: what is bound to what, right now.\n *\n * Everything the UI decides from is decided here — the command's title, whether the binding\n * is a user override, and whether another command answers to the same chord. That last one\n * is why the view carries `clash`: nothing rejects a collision and `#matchFor` scans in\n * reverse so the LAST registration wins, which means binding Delete onto ⌘P silently stops\n * Quick Open from opening. Detecting that needs the whole list at once, which is exactly the\n * sort of thing a component rendering one row cannot do and a view can.\n */\nexport const keybindings = new ViewQuery(REGISTRY_DEPS, registries, (r) => {\n const resolved = r.keybindings.resolved();\n const overrides = r.keybindings.overrides();\n const perKey = new Map();\n for (const b of resolved) perKey.set(b.key, (perKey.get(b.key) || 0) + 1);\n return resolved.map((b) => ({\n bindingId: b.bindingId,\n command: b.command,\n title: r.contributions.get(b.command)?.title ?? b.command,\n key: b.key,\n label: prettyKey(b.key),\n custom: !!overrides[b.bindingId],\n clash: perKey.get(b.key) > 1,\n }));\n});\n\n/**\n * What the launcher is showing: its groups, the view drawing them, and the help offered\n * when a search found nothing. See bl/launcher.js.\n *\n * Parameterised by `modal` — the double-shift overlay and the home screen are BOTH on\n * screen when the overlay is up, so which instance is rendering is the one input that\n * genuinely is not engine state. Two values, so interning gives at most two realizations.\n *\n * `view` is folded in because choosing it needs the items, and the items are right here.\n * That was the last thing keeping `pickView` outside the engine.\n */\nexport const launcherContent = (modal = false) => LauncherContent.of(!!modal);\n\nconst LAUNCHER_DEPS = [...REGISTRY_DEPS, 'explorer', 'search', 'workbench', 'navigation', 'offline', 'capabilities'];\n\nclass LauncherContent extends ViewQuery {\n static of = queryOf(LauncherContent);\n\n constructor(modal) {\n super(\n LAUNCHER_DEPS,\n (r) => [\n ...registries(r),\n r.explorer.observe(), r.search.observe(),\n r.workbench.observe(), r.navigation.observe(), r.offline.observe(),\n // Capabilities arrive after the first render — the provider hands out a cell that\n // fills in — so this has to be watched, not merely read, or the search help would\n // never appear on a drive whose prompt the server supplies.\n r.capabilities,\n ],\n (r) => {\n const wb = r.workbench.get();\n const off = r.offline.observe().getValue() || {};\n const slices = {\n ex: r.explorer.observe().getValue() || {},\n se: r.search.observe().getValue() || {},\n nav: r.navigation.observe().getValue() || {},\n query: wb.launch.query || '',\n commandMatches: rankCommands(paletteCommandsOf(r), (wb.launch.query || '').slice(1)),\n pinnedIds: new Set((off.pins || []).map((p) => p.id)),\n keys: commandKeysOf(r),\n };\n const groups = launcherGroupsOf(slices, this.modal);\n const mode = launcherMode(slices.query);\n return {\n groups,\n mode,\n // Which view draws them. Needs the nodes on screen, which is exactly what this\n // query has just worked out — see bl/views.js. This was the last thing keeping\n // the choice outside the engine.\n view: pickView(viewsOf(r), groups.flatMap((g) => g.items),\n mode === 'search' ? slices.se.resolved?.view ?? null : null),\n // What to offer when a search found nothing. Both halves are here now: whether\n // an offer applies at all (a search ran, it succeeded, it found nothing) and\n // what to suggest, which the server decides — see the `capabilities` resource.\n help: searchHelpOf({\n eligible: mode !== 'command'\n && !!slices.se.ran && !slices.se.loading && !slices.se.error\n && !(slices.se.results || []).length,\n caps: r.capabilities.getValue(),\n }),\n };\n },\n );\n this.modal = modal;\n }\n}\n\n/**\n * What the drive is doing and how full it is — see bl/status.js.\n *\n * Both shells render these, in different shapes. Derived once, here, because the last time\n * each worked them out for itself the phone bar showed a raw `col_…` id where the desktop\n * bar showed the collection's name.\n */\nexport const statusFacts = new ViewQuery(\n ['explorer', 'transfers', 'activity', 'offline'],\n (r) => [r.explorer.observe(), r.transfers.observe(), r.activity.observe(), r.offline.observe()],\n (r) => {\n const facts = statusFactsOf({\n ex: r.explorer.observe().getValue(),\n tr: r.transfers.observe().getValue(),\n act: r.activity.observe().getValue(),\n off: r.offline.observe().getValue(),\n });\n // The single most urgent thing, for a shell with room for one glyph. Folded in rather\n // than left to the phone, because deciding that offline outranks a standing problem is\n // a claim about what someone needs to know.\n return { ...facts, condition: driveConditionOf(facts) };\n },\n);\n\n/**\n * Every opener that could run right now — `when` and plugin availability already decided,\n * and the plugin's display name resolved into `source`.\n *\n * The SELECTOR is left on, which is the whole trick: which openers exist is a question\n * about engine state and belongs here, but which of them suits the file a component is\n * drawing is pure matching against data that component already holds. So the query answers\n * the reactive half and `openersFor` (a pure function, below) answers the rest — rather\n * than the query being parameterised by a node, which would need one live realization per\n * file on screen.\n *\n * Descriptors, not contributions: no `component`, no `entry`. Rendering resolves the\n * callable by id — see ui/components/openers.\n */\nexport const openers = new ViewQuery(REGISTRY_DEPS, registries, (r) =>\n r.contributions.ofType('opener')\n .filter((o) => !o.when || r.context.evaluate(o.when))\n .filter((o) => r.plugins?.isAvailable?.(o) ?? true)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((o) => describeOpener(o, r.plugins)));\n\n/**\n * How results can be drawn, and which one the user pinned.\n *\n * `saved` travels with the list because choosing between them needs both, and a component\n * that had to fetch the setting separately would be reaching for `settings` mid-render —\n * which is what this replaces. The CHOICE itself is `pickView`, a pure function, because it\n * also depends on the items on screen, and items are not something to key a query by.\n *\n * `render` and `move` come along. The rule about a query emitting a view rather than a\n * handle is about SIDE EFFECTS — a `run()` that mutates the drive is a back door around\n * actions and the feed. A view's renderer is a pure vnode builder over the arguments it is\n * given, so passing it is passing data; making the component look it up by id would have\n * been the registry access this is trying to remove, relocated rather than deleted.\n */\nexport const views = new ViewQuery(REGISTRY_DEPS, registries, viewsOf);\n\nfunction viewsOf(r) {\n return {\n views: r.contributions.ofType('view')\n .filter((v) => !v.when || r.context.evaluate(v.when))\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((v) => ({\n id: v.id,\n title: v.title ?? v.name ?? v.id,\n icon: v.icon ?? null,\n match: v.match ?? null,\n render: v.render,\n move: v.move,\n })),\n saved: r.settings.get('explorer.view') || null,\n };\n}\n\n/**\n * The saved \"always open .pdf with…\" choices, for the settings screen.\n *\n * `missing` is decided here: an association can name an opener that has since been\n * uninstalled, and the row has to say so rather than showing a bare id.\n */\nexport const openerAssociations = new ViewQuery(REGISTRY_DEPS, registries, (r) => {\n const assoc = r.settings.get(ASSOC_KEY) || {};\n return Object.entries(assoc).map(([typeKey, openerId]) => {\n const opener = r.contributions.get(openerId);\n return { typeKey, openerId, openerTitle: opener?.title || openerId, missing: !opener };\n });\n});\n\n/**\n * The conversation, tags and backlinks for one file.\n *\n * Keyed by node, and the KEY is what replaces a reaction. This used to be an `effect` in\n * bl/index.js watching the nav stack with a module-scoped `let lastTab` for change\n * detection, calling `social.loadSidecar` directly — a subscription outside the engine\n * doing effect work, and the last place that still worked that way.\n *\n * ngin already brackets this. `bootAction` is dispatched when the first observer arrives\n * and `killAction` when the last one leaves, so opening a file loads its conversation and\n * closing it clears it, because the query is alive for exactly as long as something is\n * looking. Switching files is not a change to detect: it is one instance dying and another\n * booting.\n *\n * The clear is SCOPED to this node. Kill and boot are not ordered against each other, so\n * switching from A to B can kill A after B has booted — an unscoped clear would then wipe\n * the sidecar B just asked for. It is the same race the loading path already guards, and\n * naming the node is what makes it impossible rather than unlikely.\n */\nexport const sidecarFor = (nodeId) => Sidecar.of(nodeId);\n\nclass Sidecar extends CellQuery {\n static of = queryOf(Sidecar);\n\n constructor(nodeId) {\n super('social', (r) => r.observe(), (v) => v?.sidecar ?? null);\n this.nodeId = nodeId;\n this.bootAction = new LoadSidecarAction(nodeId);\n this.killAction = new ClearSidecarAction(nodeId);\n }\n}\n\n/**\n * A file's text, capped.\n *\n * The first query keyed by something unbounded, which is what `queryOf` interning and the\n * weak eviction were built for: one instance per (node, cap), shared by every viewer\n * looking at that file, and collected once nothing is. A viewer that scrolls out of the\n * tree stops observing, ngin kills the realization, and the text goes with it — no cache\n * to invalidate and nothing to remember to release.\n *\n * `size` is a hint the API uses to decide whether a range request is worth it. It is part\n * of the key because it is part of the request, and it is derived from the node id anyway,\n * so it cannot split one file into two entries.\n *\n * Capped at the TRANSFER, not just the render: a character limit in a viewer stops us\n * laying out a huge document, but the whole file still crosses the wire without this.\n */\nexport class FileText extends Query {\n static deps = ['api'];\n\n static of = queryOf(FileText);\n\n constructor(nodeId, maxBytes, size) {\n super();\n this.nodeId = nodeId;\n this.maxBytes = maxBytes;\n this.size = size;\n }\n\n async boot({ api }, { notify }) {\n notify(await api.readTextCapped(this.nodeId, { maxBytes: this.maxBytes, size: this.size }));\n }\n\n kill() {}\n}\n\n/**\n * Command id → its keybinding label, for anything that shows a shortcut next to an action.\n *\n * Hardcoding \"⌘⇧L\" told a Windows or Linux user about a key their machine does not have,\n * and told everyone the default even after they had rebound it. A map rather than a list\n * because every caller is asking about one command it already knows the id of.\n */\nexport const commandKeys = new ViewQuery(REGISTRY_DEPS, registries, commandKeysOf);\n\nfunction commandKeysOf(r) {\n return Object.fromEntries(r.keybindings.resolved()\n .map((b) => [b.command, r.keybindings.labelFor(b.command)])\n .filter(([, label]) => label));\n}\n\n/**\n * What this deployment can do.\n *\n * A plain view over the `capabilities` resource — see bl/index.js, where the provider hands\n * out a cell that fills in once the server answers. This used to be a query that kept the\n * PROMISE on its own instance so a re-boot would not re-fetch, which is a cache with no\n * invalidation living inside a view; and it needed `initial = null` to stop the shell going\n * PENDING while the request was in flight. Both go away when the fetch belongs to the\n * provider: the cell already holds null, and reading a cell is all this does.\n */\nexport const capabilities = new CellQuery('capabilities', (r) => r);\n",
|
|
86
87
|
"// Inline SVG icons. One function, a path table, sized via viewBox 24. Using\n// dodo's element helpers so icons are just vnodes like everything else.\n\nimport { dd } from '../runtime.js';\n\nconst { svg, h } = dd;\n\n// Each entry is an array of <path>/<primitive> specs (attrs use SVG names).\nconst PATHS = {\n link: [{ d: 'M10 13a5 5 0 0 0 7.07 0l3-3A5 5 0 0 0 13 3l-1.5 1.5' }, { d: 'M14 11a5 5 0 0 0-7.07 0l-3 3A5 5 0 0 0 11 21l1.5-1.5' }],\n file: [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5' }],\n 'file-text': [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5M9 13h6M9 17h6M9 9h2' }],\n 'file-image': [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5' }, { d: 'M8.5 15l2-2 3 3 2-1.5' }, { d: 'M10 12a1 1 0 1 0 0-.01' }],\n 'file-audio': [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5M10 12v5M13 10v9' }],\n 'file-video': [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5M10 12l4 2.5-4 2.5z' }],\n book: [{ d: 'M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z' }, { d: 'M4 19a2 2 0 0 1 2-2h13' }],\n search: [{ d: 'M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14zM20 20l-3.5-3.5' }],\n mic: [{ d: 'M12 3a3 3 0 0 0-3 3v6a3 3 0 0 0 6 0V6a3 3 0 0 0-3-3z' }, { d: 'M5 11a7 7 0 0 0 14 0M12 18v3M9 21h6' }],\n command: [{ d: 'M8 6a2 2 0 1 0-2 2h12a2 2 0 1 0-2-2v12a2 2 0 1 0 2-2H6a2 2 0 1 0 2 2z' }],\n gear: [{ d: 'M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z' }, { d: 'M19 12a7 7 0 0 0-.1-1.2l2-1.6-2-3.4-2.4 1a7 7 0 0 0-2-1.2L14 2h-4l-.5 2.6a7 7 0 0 0-2 1.2l-2.4-1-2 3.4 2 1.6A7 7 0 0 0 5 12a7 7 0 0 0 .1 1.2l-2 1.6 2 3.4 2.4-1a7 7 0 0 0 2 1.2L10 22h4l.5-2.6a7 7 0 0 0 2-1.2l2.4 1 2-3.4-2-1.6A7 7 0 0 0 19 12z' }],\n upload: [{ d: 'M12 16V4M7 9l5-5 5 5M4 20h16' }],\n download: [{ d: 'M12 4v12M7 11l5 5 5-5M4 20h16' }],\n trash: [{ d: 'M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13M10 11v6M14 11v6' }],\n refresh: [{ d: 'M20 11a8 8 0 1 0-.5 4M20 5v6h-6' }],\n 'chevron-right': [{ d: 'M9 6l6 6-6 6' }],\n 'chevron-left': [{ d: 'M15 6l-6 6 6 6' }],\n 'chevron-down': [{ d: 'M6 9l6 6 6-6' }],\n close: [{ d: 'M6 6l12 12M18 6L6 18' }],\n tag: [{ d: 'M4 4h6.5a1 1 0 0 1 .7.3l8.5 8.5a1 1 0 0 1 0 1.4l-5.5 5.5a1 1 0 0 1-1.4 0L4.3 11.2a1 1 0 0 1-.3-.7V4z' }, { d: 'M8 8a0.6 0.6 0 1 0 0-.01' }],\n play: [{ d: 'M8 5v14l11-7z', fill: 'currentColor', stroke: 'none' }],\n pause: [{ d: 'M8 5h3v14H8zM13 5h3v14h-3z', fill: 'currentColor', stroke: 'none' }],\n 'skip-back': [{ d: 'M11 6v12L3 12zM13 6l8 6-8 6zM21 6v12', fill: 'none' }],\n 'skip-forward': [{ d: 'M13 6v12l8-6zM3 6l8 6-8 6zM3 6v12' }],\n 'back-30': [{ d: 'M11 8a7 7 0 1 0 7 7' }, { d: 'M11 4l-3 4 4 1' }],\n 'fwd-30': [{ d: 'M13 8a7 7 0 1 1-7 7' }, { d: 'M13 4l3 4-4 1' }],\n plug: [{ d: 'M9 3v6M15 3v6M6 9h12v3a6 6 0 0 1-12 0zM12 18v3' }],\n bell: [{ d: 'M18 8a6 6 0 1 0-12 0c0 7-3 9-3 9h18s-3-2-3-9z' }, { d: 'M13.73 21a2 2 0 0 1-3.46 0' }],\n files: [{ d: 'M4 4h9l3 3v3M8 8h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2z' }],\n dots: [{ d: 'M5 12h.01M12 12h.01M19 12h.01' }],\n check: [{ d: 'M5 12l5 5L20 6' }],\n plus: [{ d: 'M12 5v14M5 12h14' }],\n 'arrow-up': [{ d: 'M12 19V5M6 11l6-6 6 6' }],\n star: [{ d: 'M12 3l2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1L3.2 9.5l6.1-.9z' }],\n info: [{ d: 'M12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18zM12 11v5M12 8h.01' }],\n warn: [{ d: 'M12 3l9 16H3zM12 10v4M12 17h.01' }],\n x: [{ d: 'M6 6l12 12M18 6L6 18' }],\n list: [{ d: 'M8 6h12M8 12h12M8 18h12M4 6h.01M4 12h.01M4 18h.01' }],\n grid: [{ d: 'M4 4h7v7H4zM13 4h7v7h-7zM4 13h7v7H4zM13 13h7v7h-7z' }],\n};\n\n// Map a node to an icon name via the shared file-type classifier.\nexport { iconForKind as iconForNode } from '../bl/fileType.js';\n\nexport function icon(name, { size = 18, strokeWidth = 1.6, className } = {}) {\n // `Object.hasOwn`, not a bare lookup: `PATHS` is a plain object, so a contribution\n // declaring `\"icon\": \"constructor\"` (kept verbatim from the manifest) otherwise\n // resolves to a function and takes down the whole render with `specs.map is not a\n // function`.\n const specs = Object.hasOwn(PATHS, name) ? PATHS[name] : PATHS.file;\n // `class` through `$attrs`, not `className`. An SVGElement's `className` is a\n // read-only SVGAnimatedString, so the prop is written out as a literal `className=\"…\"`\n // attribute — which no selector matches. `.sheet-row .sr-go` was styling nothing.\n return svg(\n {\n $attrs: {\n viewBox: '0 0 24 24', width: size, height: size, fill: 'none',\n stroke: 'currentColor', 'stroke-width': strokeWidth,\n 'stroke-linecap': 'round', 'stroke-linejoin': 'round',\n ...(className ? { class: className } : {}),\n },\n },\n ...specs.map((s) => h('path', { $attrs: filterAttrs(s) })),\n );\n}\n\nfunction filterAttrs(s) {\n const out = { d: s.d };\n if (s.fill) out.fill = s.fill;\n if (s.stroke) out.stroke = s.stroke;\n return out;\n}\n",
|
|
@@ -95,8 +96,8 @@
|
|
|
95
96
|
"// The list view: one row per item, which is what a drive looks like unless you ask\n// for something else.\n//\n// It is also the fallback for every other view: one that throws lands here, and views\n// are host code with no sandbox to catch them first. So it must not depend on anything\n// beyond the contract itself — no settings, no capabilities, no network.\n\nimport { dd } from '../../../runtime.js';\nimport { icon } from '../../icon.js';\nimport { groupHeader, menuButton, openRowMenu } from './parts.js';\nimport { activate } from '../../activate.js';\n\nconst { div, span } = dd;\n\nexport function listView({ groups, index, handlers, ui }) {\n let gi = -1;\n return div({ className: 'launch-view view-list' },\n ...groups.map((group) => div({ className: 'launch-group' },\n groupHeader(group, ui),\n group.items.length\n ? div({ className: 'launch-list' }, ...group.items.map((it) => {\n const at = ++gi;\n return itemRow(it, at === index, {\n hover: () => handlers.hover(at),\n select: () => handlers.select(at),\n }, ui);\n }))\n : div({ className: 'launch-empty' }, group.empty || 'Nothing here.'),\n )),\n );\n}\n\nfunction itemRow(it, active, { hover, select }, ui) {\n return div({ className: `launch-item ${active ? 'active' : ''}` },\n icon(it.icon, { size: 15 }),\n span({ className: 'name' }, it.title),\n it.detail ? span({ className: 'launch-detail' }, it.detail) : null,\n it.badge ? span({ className: 'launch-kind' }, it.badge) : null,\n // Everything you can do to a file, on the file. Rename, download, copy link and\n // delete were all commands with no way to reach them: the palette's versions act on\n // \"the selection\", and until the highlight became a selection there never was one.\n menuButton(it, ui, select),\n // One `.on()` call: a second replaces the handler map rather than merging into it,\n // which is how adding `contextmenu` silently removed `click` and stopped every file\n // in the drive from opening.\n ).on({\n click: () => activate(ui, it),\n mouseenter: hover,\n ...(it.menu ? { contextmenu: (e) => { e.preventDefault(); openRowMenu(e.currentTarget, it, ui, e, select); } } : {}),\n });\n}\n",
|
|
96
97
|
"// Keeping a media element pointed at a URL that still works.\n//\n// A minted URL expires (docs/design/signed-urls.md). Content URLs are long — longer than\n// almost any sitting — but \"almost\" is not \"always\": someone pauses a film, closes the\n// laptop, and comes back tomorrow. So the element has to be able to swap its own source,\n// and swapping the source under a playing video is not a matter of assigning `src`.\n//\n// Both refresh paths are needed and neither is sufficient alone:\n//\n// PROACTIVE a timer from `expiresAt`. Handles the common case invisibly.\n// REACTIVE the element's own `error`. A backgrounded tab has its timers throttled,\n// so the proactive refresh may simply never run — which is exactly the\n// paused-overnight case, the one the timer was supposed to cover.\n\nconst REFRESH_AT = 0.8; // of the URL's life, so the swap lands well before it matters.\nconst MAX_TIMER = 2 ** 31 - 1; // setTimeout overflows past this and fires immediately.\n\n/**\n * Point `el` at `node`'s bytes and keep it pointed there.\n *\n * @param {HTMLMediaElement|HTMLImageElement} el\n * @param {object} node\n * @param {object} ui\n * @param {{op?: string, onError?: (msg: string) => void}} [opts]\n * @returns {() => void} detach\n */\nexport function attachMedia(el, node, ui, { op = 'media', onError } = {}) {\n const urls = ui.platform.mediaUrls;\n let timer = null;\n let stopped = false;\n // One retry per URL. A file whose bytes are genuinely gone would otherwise re-mint\n // forever, hammering the server over a 404 that is never going to change.\n let retried = false;\n\n const clear = () => { clearTimeout(timer); timer = null; };\n\n const schedule = (expiresAt) => {\n clear();\n if (!Number.isFinite(expiresAt)) return; // nothing was minted; nothing expires\n const wait = Math.max(1000, (expiresAt - Date.now()) * REFRESH_AT);\n timer = setTimeout(() => apply({ resume: true }), Math.min(wait, MAX_TIMER));\n };\n\n /**\n * Fetch a URL and put it on the element, preserving where the user was.\n *\n * The order matters and every step earns its place: without `resume` the film restarts\n * from the beginning, without `load()` an element that has already errored may not pick\n * up the new source at all, and without the final `play()` it sits there paused looking\n * like a crash.\n */\n async function apply({ resume }) {\n if (stopped) return;\n const media = isMedia(el);\n const at = media && resume ? el.currentTime : 0;\n const wasPlaying = media && resume ? !el.paused && !el.ended : false;\n let got;\n try {\n got = await urls.url(node.id, { op });\n } catch (err) {\n if (!stopped) onError?.(err.message);\n return;\n }\n if (stopped) return;\n el.src = got.url;\n if (media) {\n el.load();\n if (at > 0 || wasPlaying) {\n const restore = () => {\n el.removeEventListener('loadedmetadata', restore);\n // Guard the seek: a live or zero-length source has nowhere to seek to, and\n // assigning currentTime there throws.\n if (at > 0 && Number.isFinite(el.duration) && el.duration > at) el.currentTime = at;\n if (wasPlaying) el.play().catch(() => { /* autoplay policy; the user can press play */ });\n };\n el.addEventListener('loadedmetadata', restore);\n }\n }\n schedule(got.expiresAt);\n }\n\n // The retry budget is spent by a failed LOAD and refunded by a successful one — not by\n // a successful mint. Refunding it in `apply` meant a file whose bytes are genuinely\n // gone re-minted forever: every retry got a perfectly good URL, reset the budget, and\n // failed again, so the fallback was never shown and the request never stopped.\n const onLoaded = () => { retried = false; };\n el.addEventListener('load', onLoaded); // <img>\n el.addEventListener('loadeddata', onLoaded); // <audio>/<video>\n\n // The reactive half. An expired URL and a missing file look identical from here — both\n // are just a failed load — so it re-mints once and, if that fails too, says so.\n const onElementError = () => {\n if (stopped) return;\n if (retried) { onError?.(null); return; }\n retried = true;\n urls.invalidate(node.id, op);\n apply({ resume: true });\n };\n el.addEventListener('error', onElementError);\n\n apply({ resume: false });\n\n return () => {\n stopped = true;\n clear();\n el.removeEventListener('error', onElementError);\n el.removeEventListener('load', onLoaded);\n el.removeEventListener('loadeddata', onLoaded);\n };\n}\n\nfunction isMedia(el) {\n return typeof el?.play === 'function' && typeof el?.load === 'function';\n}\n\n/**\n * Point an `<img>` at a contributed thumbnail — see bl/fileType.js for the two shapes.\n *\n * A `src` needs no help. A `range` is bytes inside the file, so they are fetched through\n * `fileChunks`, which means a pinned book draws its cover with the network off and a book\n * being kept offline contributes the read. The blob URL is revoked on detach: a wall of\n * tiles that minted one each and never gave them back would hold every cover in memory for\n * as long as the tab lived.\n *\n * @returns {() => void} detach\n */\nexport function attachThumbnail(el, node, thumb, ui) {\n if (thumb?.src) {\n el.src = thumb.src;\n return () => {};\n }\n let url = null;\n let live = true;\n ui.platform.fileChunks.read(node.id, thumb.range)\n .then(({ bytes }) => {\n if (!live || !bytes?.length) return;\n url = URL.createObjectURL(new Blob([bytes], { type: thumb.contentType || 'image/jpeg' }));\n el.src = url;\n })\n // A cover that will not load is a tile with an icon on it, which is what the list shows\n // anyway — not an error worth putting in front of anyone.\n .catch(() => { el.style.display = 'none'; });\n return () => {\n live = false;\n if (url) URL.revokeObjectURL(url);\n url = null;\n };\n}\n",
|
|
97
98
|
"// The grid view: tiles, with a picture on them where there is a picture to show.\n//\n// This is the second way to look at a drive, and it exists as much to prove the view\n// contract as to be useful — a contribution type with one implementation is a guess. It\n// draws the SAME groups the list does, headers and all, because the group header is\n// where Upload, Empty trash and Retry live: a view that dropped it would take those off\n// the screen the moment someone switched to tiles.\n//\n// On thumbnails, honestly: there is no thumbnail service yet, so a tile showing a\n// photograph is showing the photograph, scaled down by the browser. That is affordable\n// only because `loading=\"lazy\"` means the ones below the fold are never fetched — the\n// grid asks for what is on screen and nothing else. A hosted build that generates real\n// thumbnails should register its own view rather than patch this one; that is the whole\n// point of the contribution.\n\nimport { dd } from '../../../runtime.js';\nimport { icon } from '../../icon.js';\nimport { thumbnailOf } from '../../../bl/fileType.js';\nimport { groupHeader, menuButton, openRowMenu } from './parts.js';\nimport { attachMedia, attachThumbnail } from '../../media.js';\nimport { activate } from '../../activate.js';\n\nconst { div, span, img } = dd;\n\nexport function gridView({ groups, index, handlers, ui }) {\n let gi = -1;\n return div({ className: 'launch-view view-grid' },\n ...groups.map((group) => div({ className: 'launch-group' },\n groupHeader(group, ui),\n group.items.length\n ? div({ className: 'grid-list' }, ...group.items.map((it) => {\n const at = ++gi;\n return tile(it, at === index, {\n hover: () => handlers.hover(at),\n select: () => handlers.select(at),\n }, ui);\n }))\n : div({ className: 'launch-empty' }, group.empty || 'Nothing here.'),\n )),\n );\n}\n\n/**\n * Which way to move for an arrow key.\n *\n * The launcher owns keyboard navigation and thinks in one flat list, which is right for\n * rows and wrong for tiles: down should mean the tile below, not the tile beside. The\n * view is asked, gets to answer in the launcher's own terms (a delta), and the launcher\n * keeps the wrapping, the selection and the scrolling.\n *\n * The column count is measured rather than assumed, because it comes from\n * `auto-fill` — it depends on the window width, the shell, and whether the sidebar\n * is open, none of which this file should be trying to predict.\n *\n * Left and right are only ours when the search box is empty. With a query typed in it,\n * those keys belong to the caret: someone fixing a typo must not find the highlight\n * walking across the grid instead.\n */\nexport function gridMove({ key, textual }) {\n if (key === 'ArrowLeft') return textual ? null : -1;\n if (key === 'ArrowRight') return textual ? null : 1;\n const cols = columns();\n if (key === 'ArrowUp') return -cols;\n if (key === 'ArrowDown') return cols;\n return null;\n}\n\nfunction columns() {\n // Tiles on the same row share an offsetTop. One row's worth is the answer; a grid with\n // a single row (or none on screen) falls back to 1, which is the list's behaviour and\n // never worse than a guess.\n const tiles = document.querySelectorAll('.grid-list .grid-tile');\n if (tiles.length < 2) return 1;\n const top = tiles[0].offsetTop;\n let n = 0;\n for (const el of tiles) {\n if (el.offsetTop !== top) break;\n n++;\n }\n return n || 1;\n}\n\nfunction tile(it, active, { hover, select }, ui) {\n const node = it.node;\n // A contributed thumbnail beats the file itself. It is already a picture of the right\n // size, it needs no minted URL, and for anything that is not an image it is the only\n // picture there is — an audiobook's cover art comes this way. See bl/fileType.js.\n const thumb = thumbnailOf(node);\n const pictorial = !thumb && (node?.contentType || '').startsWith('image/');\n return div({ className: `grid-tile ${active ? 'active' : ''}`, title: it.detail ? `${it.title} — ${it.detail}` : it.title },\n div({ className: 'gt-media' },\n // The icon is drawn underneath, always. When the image loads it covers it; when\n // the image fails — a deleted object, a format the browser won't decode, a 401 —\n // hiding the <img> uncovers exactly what the list would have shown, rather than\n // leaving the browser's broken-image glyph in a gallery.\n icon(it.icon, { size: 26 }),\n // The `src` is minted rather than built — a tile fetches without our Authorization\n // header, so the URL has to carry its own grant. Minting is batched (see\n // platform/mediaUrls.js), so a wall of tiles costs one request, not one each.\n // A contributed thumbnail needs no minted URL: it is either self-contained or a\n // range inside a file this session may already hold. See ui/media.js.\n thumb\n ? img({ className: 'gt-img', alt: '', loading: 'lazy', decoding: 'async' }).on({\n $attach: (dom) => { dom._detachThumb = attachThumbnail(dom, node, thumb, ui); },\n $detach: (dom) => { dom._detachThumb?.(); dom._detachThumb = null; },\n }).opaque()\n : null,\n pictorial\n ? img({ className: 'gt-img', alt: '', loading: 'lazy', decoding: 'async' }).on({\n $attach: (dom) => {\n dom._detachMedia = attachMedia(dom, node, ui, {\n // Uncovering the icon underneath is exactly what the list would have shown,\n // and better than the browser's broken-image glyph in a gallery.\n onError: () => { dom.style.display = 'none'; },\n });\n },\n $detach: (dom) => { dom._detachMedia?.(); dom._detachMedia = null; },\n }).opaque()\n : null,\n it.badge ? span({ className: 'gt-badge' }, it.badge) : null,\n menuButton(it, ui, select),\n ),\n div({ className: 'gt-name' }, it.title),\n ).on({\n click: () => activate(ui, it),\n mouseenter: hover,\n ...(it.menu ? { contextmenu: (e) => { e.preventDefault(); openRowMenu(e.currentTarget, it, ui, e, select); } } : {}),\n });\n}\n",
|
|
98
|
-
"// How a list of items is DRAWN.\n//\n// An opener renders one file; a view renders the results. They register through the\n// same contribution system, so \"a gallery for a collection full of photographs\" is a\n// contribution rather than an edit to the launcher — which is the whole point: the\n// launcher should not have to know how many ways there are to look at a drive.\n//\n// A view is the workbench's own: the built-ins, plus whatever a build passes to\n// `createWorkbench({ views })`. It runs in the host, so the contract is a dodo vnode.\n//\n// The contract is one function:\n//\n// render({ groups, index, handlers, state, ui }) -> vnode\n//\n// `groups` is what the launcher assembled — `[{ title, verbatim?, action?, items,\n// empty? }]`, each item `{ icon, title, detail, badge, node?, run() }`. `index` is the\n// flat position of the highlighted item across every group, because keyboard\n// navigation is the launcher's job and not the view's: up and down must mean the same\n// thing whichever way the results happen to be drawn.\n\nimport { dd } from '../../../runtime.js';\nimport { icon } from '../../icon.js';\nimport { SetSettingAction } from '../../../bl/actions.js';\nimport { SETTING } from '../../../bl/views.js';\nimport { listView } from './list.js';\nimport { gridView, gridMove } from './grid.js';\n\nconst { div, button, span } = dd;\n\nconst BUILT_IN = {\n 'core.view.list': {\n title: 'List', icon: 'list', priority: 50,\n render: listView,\n },\n 'core.view.grid': {\n // Offered first where the results are pictures, and available everywhere.\n title: 'Grid', icon: 'grid', priority: 40,\n match: { mime: ['image/*', 'video/*'] },\n render: gridView, move: gridMove,\n },\n};\n\nexport function registerBuiltinViews(platform) {\n for (const [name, spec] of Object.entries(BUILT_IN)) {\n platform.contributions.register(name, { type: 'view', ...spec });\n }\n}\n\n\n\n/** The switcher, shown only when there is more than one way to look at this. */\nexport function viewSwitcher(slice, current, ui) {\n const views = slice?.views || [];\n if (views.length < 2) return null;\n return div({ className: 'view-switch' }, ...views.map((v) =>\n button({\n className: `vs-btn ${v.id === current?.id ? 'on' : ''}`,\n title: `${v.title} view`,\n 'aria-pressed': v.id === current?.id ? 'true' : 'false',\n }, icon(v.icon || 'list', { size: 14 }))\n .on({ click: () => ui.engine.dispatch(new SetSettingAction(SETTING, v.id)) })));\n}\n\n/**\n * Draw the results with `view`, falling back to the list if it throws.\n *\n * A view is the whole results area. One that fails takes the drive's contents off the\n * screen with it, so a broken third-party view degrades to the built-in list rather\n * than to nothing.\n */\n/**\n * The delta an arrow key should move the highlight by, or null for the default.\n *\n * Keyboard navigation stays the launcher's: it owns the index, the selection and the\n * wrapping. But \"down\" means the row below in a list and the tile below in a grid, so\n * the view is asked first and answers in the launcher's own terms.\n */\nexport function viewMove(view, key, ctx) {\n try {\n const d = view?.move?.({ key, ...ctx });\n return Number.isFinite(d) && d !== 0 ? d : null;\n } catch {\n return null; // a view that can't answer doesn't get to break the arrow keys\n }\n}\n\nexport function renderView(view, ctx) {\n try {\n if (typeof view?.render === 'function') return view.render(ctx);\n } catch (err) {\n console.error(`view \"${view?.id}\" failed`, err);\n return div({},\n div({ className: 'view-error' }, icon('warn', { size: 13 }),\n span(`The “${view?.title || view?.id}” view could not be drawn — showing the list instead.`)),\n listView(ctx));\n }\n return listView(ctx);\n}\n\nexport { listView, gridView };\n",
|
|
99
|
-
"// The main-panel launcher — search-first \"home\" that replaces the explorer\n// sidebar. Empty query shows recents + everything in the collection; typing\n// searches files; a leading `!` switches to command execution; a leading `#`\n// filters by tag/property (parsed in the search layer). One keyboard-navigable\n// list across whichever mode is active.\n\nimport { dd } from '../../runtime.js';\nimport { icon } from '../icon.js';\nimport { ExecCommandAction, FilterAction, MoveLaunchAction, SearchAction, SelectLaunchAction, SetLaunchIndexAction, SetLaunchQueryAction } from '../../bl/actions.js';\nimport { parseTagQuery, filterLabel } from '../../bl/tagQuery.js';\nimport { renderView, viewSwitcher, viewMove } from './views/index.js';\nimport { openRowMenu } from './views/parts.js';\nimport { activate } from '../activate.js';\n\nconst { div, span, input, button } = dd;\n\n// The keys a view may claim. Everything else the search box keeps.\nconst ARROWS = new Set(['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']);\n\n// What to put in the search box, and how much of it fits.\n//\n// The server tells us, because the search TRANSFORMER decides what the box accepts and\n// that is deployment configuration — swap in an LLM transformer and \"# filter by tag\"\n// stops being the right advice. The fallback covers the moment before capabilities\n// arrive and any server too old to say; `!` is ours either way, since running a command\n// from here is a client convention the server knows nothing about.\nfunction promptFor(caps, { compact = false, modal = false } = {}) {\n const p = caps?.searchPrompt;\n const base = (compact ? p?.short || p?.placeholder : p?.placeholder)\n || (compact ? 'Search files' : 'Search files · # filter by tag');\n // On a phone the box is ~300px wide; adding a second clause guarantees an ellipsis\n // in the middle of the instructions, which reads as broken rather than terse.\n return compact || modal ? base : `${base} · ! run a command`;\n}\n\n// Debounce timers, one PER SURFACE. workbench.js mounts the home launcher and the modal\n// one together, and a single module slot meant typing in the modal cancelled the home\n// box's pending search — one keystroke in one component silently discarding another's.\n// A timer is not application state (the engine has no use for a pending timeout), but it\n// does belong to the surface that armed it.\nconst timers = new Map();\nconst arm = (key, fn, ms) => {\n clearTimeout(timers.get(key));\n timers.set(key, setTimeout(fn, ms));\n};\n\nfunction runSearch(ui, key, query) {\n // SearchAction owns search state; the launcher only dispatches (no direct .set).\n arm(key, () => ui.engine.dispatch(new SearchAction(query)), 240);\n}\nfunction clearSearch(ui, key) {\n // The pending timer FIRST. Typing then pressing Escape inside 240ms let the search for\n // what was typed land after the clear — the results list stayed put (it reads the launch\n // query) while the resolved bar said \"Searching …\" over the home list, and `pickView`\n // could switch the view under it. SearchAction now also refuses a superseded answer, so\n // this is belt and braces on a race that produced a visibly wrong screen.\n clearTimeout(timers.get(key));\n ui.engine.dispatch(new SetLaunchQueryAction(''));\n ui.engine.dispatch(new SearchAction('')); // empty query resets results/ran/error\n}\nfunction runFilter(ui, key, filters, text) {\n arm(key, () => ui.engine.dispatch(new FilterAction(filters, text)), 200);\n}\n\nexport default function launcher(state, ui, opts = {}) {\n const modal = !!opts.modal; // rendered as the double-shift overlay → picks reset the stack\n const q = state.wb.launch.query;\n // What is on screen, which view draws it, and whether a search-help offer applies — all\n // decided by the `launcherContent` query. This used to be ~100 lines of derivation right\n // here: which nodes, what each heading says, whether \"All items\" is a claim the drive\n // cannot support. See bl/launcher.js.\n const content = modal ? state.modalContent : state.content;\n const { groups, mode, view } = content;\n const flat = groups.flatMap((g) => g.items);\n const idx = flat.length ? Math.min(state.wb.launch.index, flat.length - 1) : 0;\n\n // Which surface this is, so the two launchers do not share one debounce slot.\n const timerKey = modal ? 'modal' : 'home';\n const onInput = (e) => {\n const v = e.target.value;\n ui.engine.dispatch(new SetLaunchQueryAction(v));\n if (v.startsWith('!')) return; // command mode: no query dispatch\n const { text, filters } = parseTagQuery(v);\n if (filters.length) runFilter(ui, timerKey, filters, text); // drive-wide tag/property query\n else runSearch(ui, timerKey, text);\n };\n // Moving the highlight with the KEYBOARD is selecting, as far as the rest of the app\n // is concerned. Without this, `explorer.selectedNodes()` was permanently empty and\n // every command that works on \"the selected item\" — delete above all — silently did\n // nothing.\n //\n // Hovering deliberately does not select. It moves the highlight (so Enter opens what\n // the pointer is over) but leaves the selection alone: a second state push per mouse\n // move re-renders the list under the pointer, and a row replaced between mousedown and\n // mouseup never receives its click. A pointer user acts through the row's own menu,\n // which selects explicitly before it opens.\n const hoverAt = (at) => ui.engine.dispatch(new SetLaunchIndexAction(at));\n // Moving the highlight and selecting what it lands on are one action, not two. The index\n // wraps, so only the store can say where a move ends up — and reading that back out here\n // would read it before the dispatch had applied. See MoveLaunchAction.\n const selectAt = (at) => ui.engine.dispatch(new SelectLaunchAction(at, flat[at]?.node));\n const move = (delta) => ui.engine.dispatch(new MoveLaunchAction(delta, flat.map((i) => i.node)));\n // The view gets a say in what an arrow key means — one row down is one tile down in a\n // grid, not one tile across — but the index, the selection and the wrapping stay here, so\n // up and down mean the same thing whichever view is showing.\n const onKey = (e) => {\n // `textual`: there is text in the box, so left/right are the caret's and no view\n // may claim them. Fixing a typo must not move the highlight.\n const claimed = ARROWS.has(e.key)\n ? viewMove(view, e.key, { index: idx, count: flat.length, textual: q.length > 0 })\n : null;\n if (claimed !== null) { e.preventDefault(); move(claimed); }\n else if (e.key === 'ArrowDown') { e.preventDefault(); move(1); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); move(-1); }\n else if (e.key === 'Enter') { e.preventDefault(); activate(ui, flat[idx]); }\n else if (e.key === 'Escape' && q) { e.preventDefault(); clearSearch(ui, timerKey); }\n // The row under the highlight is the subject of the row menu, so the key that opens\n // one on every other list opens this one too — without making the user leave the\n // search box to reach it.\n else if (e.key === 'ContextMenu' || (e.shiftKey && e.key === 'F10')) {\n const it = flat[idx];\n // Arrowing here already selected the row, so the menu acts on the right thing.\n if (it?.menu) { e.preventDefault(); openRowMenu(document.querySelector('.launch-item.active, .grid-tile.active'), it, ui); }\n }\n };\n\n // What the server actually searched (transformer output) — shown when it differs\n // from what the user typed, so an LLM-assisted transform stays honest.\n const resolved = mode === 'search' ? state.se.resolved : null;\n const showResolved = resolved && (resolved.source === 'llm'\n || (resolved.tagFilters && resolved.tagFilters.length)\n || (resolved.semanticText || '').trim() !== q.trim());\n\n const inner = div({ className: 'launcher' },\n div({ className: 'launch-box' },\n icon(mode === 'command' ? 'command' : mode === 'filter' ? 'tag' : 'search', { size: 18 }),\n // `false`, not `'false'`: this is set as a property, and the string is truthy —\n // so the search box had spellcheck ON, red-underlining every filename typed into it.\n input({ className: 'launch-input', value: q, autofocus: true, spellcheck: false,\n placeholder: promptFor(state.caps, { compact: state.vp?.mode === 'phone', modal }) })\n .on({ input: onInput, keydown: onKey }),\n q ? button({ className: 'launch-clear', title: 'Clear' }, icon('close', { size: 14 }))\n .on({ click: () => clearSearch(ui, timerKey) }) : null,\n // Only where the browser can transcribe WITHOUT sending audio anywhere. A remote's\n // own mic needs no button from us — it dictates into this field once it is focused,\n // which is what `search.voice` is really for.\n state.voice?.canListen\n ? button({\n className: `launch-mic ${state.voice?.listening ? 'on' : ''}`,\n title: state.voice?.listening ? 'Stop listening' : 'Search by voice',\n 'aria-pressed': state.voice?.listening ? 'true' : 'false',\n }, icon('mic', { size: 15 })).on({ click: () => ui.engine.dispatch(new ExecCommandAction('search.voice')) })\n : null,\n // Which way to look at the drive. Not in the modal search, where the answer is\n // always \"the one thing I am about to press Enter on\".\n modal ? null : viewSwitcher(state.views, view, ui),\n ),\n showResolved ? resolvedBar(resolved) : null,\n // The results belong to the active view — see ui/components/views. The launcher says\n // WHAT is on screen (these groups, this highlight); the view says how it looks. That\n // split is why a gallery is a contribution rather than another branch in here.\n div({ className: 'launch-body' },\n renderView(view, { groups, index: idx, handlers: { hover: hoverAt, select: selectAt }, state, ui }),\n searchHelp(content.help, ui),\n ),\n );\n return modal ? inner : div({ className: 'editor' }, inner);\n}\n\n// An \"under-bar\" reflecting what the search actually ran (the transformer's output):\n// the semantic text it searched for + any tag filters it applied. Read-only and\n// honest — we don't rewrite the user's input, we just show what was dispatched.\nfunction resolvedBar(r) {\n return div({ className: 'launch-resolved' },\n span({ className: 'rq-label' }, r.source === 'llm' ? 'Interpreted as' : 'Searching'),\n (r.semanticText || '').trim() ? span({ className: 'rq-text' }, `“${r.semanticText.trim()}”`) : null,\n ...(r.tagFilters || []).map((f) => span({ className: 'rq-chip' }, icon('tag', { size: 11 }), filterLabel(f))),\n );\n}\n\n// Keep the drive's idea of \"what is selected\" in step with the highlighted row.\n//\n// The NODE goes along with the id. A search result or a recent can be from a collection\n// that isn't loaded — or a page that isn't — so an id alone is something the explorer\n// cannot resolve, and the commands that act on \"the selection\" then do nothing at all.\n\n/**\n * How this search box works — shown when, and only when, a search came back empty.\n *\n * That is the one moment the syntax is worth explaining: the user asked for something\n * and got nothing, and \"you typed it wrong\" is a real possibility they can act on.\n * Showing it any earlier is a permanent instruction panel above an empty drive, and\n * showing it when there ARE results would be explaining a thing that just worked.\n *\n * The text comes from the server's transformer, so it describes the grammar this\n * deployment actually runs rather than the one this file was written against.\n */\n// Decided by the `launcherContent` query — whether an offer applies, and what the server\n// suggests. This only draws it.\nfunction searchHelp(help, ui) {\n if (!help) return null;\n return div({ className: 'launch-help' },\n help.hint ? div({ className: 'lh-hint' }, icon('info', { size: 13 }), span(help.hint)) : null,\n help.examples.length\n ? div({ className: 'lh-examples' }, ...help.examples.map((ex) =>\n button({ className: 'lh-example', title: ex.label || 'Try this search' },\n span({ className: 'lh-q' }, ex.query),\n ex.label ? span({ className: 'lh-label' }, ex.label) : null,\n ).on({ click: () => activate(ui, ex) })))\n : null,\n );\n}\n\n\n\n\n// The trash is the one place \"delete\" means destroy, so its two verbs live together:\n// put it back, or finish the job on this one item. Emptying the whole trash was\n// previously the only way to purge anything.\n\n\n// Substring-first, then subsequence fuzzy score (0 = no match).\n",
|
|
99
|
+
"// How a list of items is DRAWN.\n//\n// An opener renders one file; a view renders the results. They register through the\n// same contribution system, so \"a gallery for a collection full of photographs\" is a\n// contribution rather than an edit to the launcher — which is the whole point: the\n// launcher should not have to know how many ways there are to look at a drive.\n//\n// A view is the workbench's own: the built-ins, plus whatever a build passes to\n// `createWorkbench({ views })`. It runs in the host, so the contract is a dodo vnode.\n//\n// The contract is one function:\n//\n// render({ groups, index, handlers, state, ui }) -> vnode\n//\n// `groups` is what the launcher assembled — `[{ title, verbatim?, action?, items,\n// empty? }]`, each item `{ icon, title, detail, badge, node?, run() }`. `index` is the\n// flat position of the highlighted item across every group, because keyboard\n// navigation is the launcher's job and not the view's: up and down must mean the same\n// thing whichever way the results happen to be drawn.\n\nimport { dd } from '../../../runtime.js';\nimport { icon } from '../../icon.js';\nimport { SetSettingAction } from '../../../bl/actions.js';\nimport { SETTING } from '../../../bl/views.js';\nimport { modeShowsItems } from '../../../bl/launcher.js';\nimport { listView } from './list.js';\nimport { gridView, gridMove } from './grid.js';\n\nconst { div, button, span } = dd;\n\nconst BUILT_IN = {\n 'core.view.list': {\n title: 'List', icon: 'list', priority: 50,\n render: listView,\n },\n 'core.view.grid': {\n // Offered first where the results are pictures, and available everywhere.\n title: 'Grid', icon: 'grid', priority: 40,\n match: { mime: ['image/*', 'video/*'] },\n render: gridView, move: gridMove,\n },\n};\n\nexport function registerBuiltinViews(platform) {\n for (const [name, spec] of Object.entries(BUILT_IN)) {\n platform.contributions.register(name, { type: 'view', ...spec });\n }\n}\n\n\n\n/** The switcher, shown only when there is more than one way to look at this. */\nexport function viewSwitcher(slice, current, ui, { mode } = {}) {\n // Two conditions, and the control is furniture without both.\n //\n // 1. The results are FILES. `!` lists commands, and a grid/list toggle over a list of\n // commands is meaningless — see `modeShowsItems`. This is the one that was missing.\n // 2. There is more than one view.\n //\n // Not, note, \"more than one view MATCHES these results\". A view's `match` is a\n // PREFERENCE, not a restriction — the grid declares `image/*` to be offered first where\n // the results are pictures, and is available everywhere regardless. Filtering by it hid\n // the grid on a drive of audiobooks, which is the opposite of the point. If a view ever\n // needs to say \"I cannot draw this\", that wants its own field rather than a reused one.\n if (mode !== undefined && !modeShowsItems(mode)) return null;\n const views = slice?.views || [];\n if (views.length < 2) return null;\n return div({ className: 'view-switch' }, ...views.map((v) =>\n button({\n className: `vs-btn ${v.id === current?.id ? 'on' : ''}`,\n title: `${v.title} view`,\n 'aria-pressed': v.id === current?.id ? 'true' : 'false',\n }, icon(v.icon || 'list', { size: 14 }))\n .on({ click: () => ui.engine.dispatch(new SetSettingAction(SETTING, v.id)) })));\n}\n\n/**\n * Draw the results with `view`, falling back to the list if it throws.\n *\n * A view is the whole results area. One that fails takes the drive's contents off the\n * screen with it, so a broken third-party view degrades to the built-in list rather\n * than to nothing.\n */\n/**\n * The delta an arrow key should move the highlight by, or null for the default.\n *\n * Keyboard navigation stays the launcher's: it owns the index, the selection and the\n * wrapping. But \"down\" means the row below in a list and the tile below in a grid, so\n * the view is asked first and answers in the launcher's own terms.\n */\nexport function viewMove(view, key, ctx) {\n try {\n const d = view?.move?.({ key, ...ctx });\n return Number.isFinite(d) && d !== 0 ? d : null;\n } catch {\n return null; // a view that can't answer doesn't get to break the arrow keys\n }\n}\n\nexport function renderView(view, ctx) {\n try {\n if (typeof view?.render === 'function') return view.render(ctx);\n } catch (err) {\n console.error(`view \"${view?.id}\" failed`, err);\n return div({},\n div({ className: 'view-error' }, icon('warn', { size: 13 }),\n span(`The “${view?.title || view?.id}” view could not be drawn — showing the list instead.`)),\n listView(ctx));\n }\n return listView(ctx);\n}\n\nexport { listView, gridView };\n",
|
|
100
|
+
"// The main-panel launcher — search-first \"home\" that replaces the explorer\n// sidebar. Empty query shows recents + everything in the collection; typing\n// searches files; a leading `!` switches to command execution; a leading `#`\n// filters by tag/property (parsed in the search layer). One keyboard-navigable\n// list across whichever mode is active.\n\nimport { dd } from '../../runtime.js';\nimport { icon } from '../icon.js';\nimport { ExecCommandAction, FilterAction, MoveLaunchAction, SearchAction, SelectLaunchAction, SetLaunchIndexAction, SetLaunchQueryAction } from '../../bl/actions.js';\nimport { parseTagQuery, filterLabel } from '../../bl/tagQuery.js';\nimport { renderView, viewSwitcher, viewMove } from './views/index.js';\nimport { openRowMenu } from './views/parts.js';\nimport { activate } from '../activate.js';\n\nconst { div, span, input, button } = dd;\n\n// The keys a view may claim. Everything else the search box keeps.\nconst ARROWS = new Set(['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']);\n\n// What to put in the search box, and how much of it fits.\n//\n// The server tells us, because the search TRANSFORMER decides what the box accepts and\n// that is deployment configuration — swap in an LLM transformer and \"# filter by tag\"\n// stops being the right advice. The fallback covers the moment before capabilities\n// arrive and any server too old to say; `!` is ours either way, since running a command\n// from here is a client convention the server knows nothing about.\nfunction promptFor(caps, { compact = false, modal = false } = {}) {\n const p = caps?.searchPrompt;\n const base = (compact ? p?.short || p?.placeholder : p?.placeholder)\n || (compact ? 'Search files' : 'Search files · # filter by tag');\n // On a phone the box is ~300px wide; adding a second clause guarantees an ellipsis\n // in the middle of the instructions, which reads as broken rather than terse.\n return compact || modal ? base : `${base} · ! run a command`;\n}\n\n// Debounce timers, one PER SURFACE. workbench.js mounts the home launcher and the modal\n// one together, and a single module slot meant typing in the modal cancelled the home\n// box's pending search — one keystroke in one component silently discarding another's.\n// A timer is not application state (the engine has no use for a pending timeout), but it\n// does belong to the surface that armed it.\nconst timers = new Map();\nconst arm = (key, fn, ms) => {\n clearTimeout(timers.get(key));\n timers.set(key, setTimeout(fn, ms));\n};\n\nfunction runSearch(ui, key, query) {\n // SearchAction owns search state; the launcher only dispatches (no direct .set).\n arm(key, () => ui.engine.dispatch(new SearchAction(query)), 240);\n}\nfunction clearSearch(ui, key) {\n // The pending timer FIRST. Typing then pressing Escape inside 240ms let the search for\n // what was typed land after the clear — the results list stayed put (it reads the launch\n // query) while the resolved bar said \"Searching …\" over the home list, and `pickView`\n // could switch the view under it. SearchAction now also refuses a superseded answer, so\n // this is belt and braces on a race that produced a visibly wrong screen.\n clearTimeout(timers.get(key));\n ui.engine.dispatch(new SetLaunchQueryAction(''));\n ui.engine.dispatch(new SearchAction('')); // empty query resets results/ran/error\n}\nfunction runFilter(ui, key, filters, text) {\n arm(key, () => ui.engine.dispatch(new FilterAction(filters, text)), 200);\n}\n\nexport default function launcher(state, ui, opts = {}) {\n const modal = !!opts.modal; // rendered as the double-shift overlay → picks reset the stack\n const q = state.wb.launch.query;\n // What is on screen, which view draws it, and whether a search-help offer applies — all\n // decided by the `launcherContent` query. This used to be ~100 lines of derivation right\n // here: which nodes, what each heading says, whether \"All items\" is a claim the drive\n // cannot support. See bl/launcher.js.\n const content = modal ? state.modalContent : state.content;\n const { groups, mode, view } = content;\n const flat = groups.flatMap((g) => g.items);\n const idx = flat.length ? Math.min(state.wb.launch.index, flat.length - 1) : 0;\n\n // Which surface this is, so the two launchers do not share one debounce slot.\n const timerKey = modal ? 'modal' : 'home';\n const onInput = (e) => {\n const v = e.target.value;\n ui.engine.dispatch(new SetLaunchQueryAction(v));\n if (v.startsWith('!')) return; // command mode: no query dispatch\n const { text, filters } = parseTagQuery(v);\n if (filters.length) runFilter(ui, timerKey, filters, text); // drive-wide tag/property query\n else runSearch(ui, timerKey, text);\n };\n // Moving the highlight with the KEYBOARD is selecting, as far as the rest of the app\n // is concerned. Without this, `explorer.selectedNodes()` was permanently empty and\n // every command that works on \"the selected item\" — delete above all — silently did\n // nothing.\n //\n // Hovering deliberately does not select. It moves the highlight (so Enter opens what\n // the pointer is over) but leaves the selection alone: a second state push per mouse\n // move re-renders the list under the pointer, and a row replaced between mousedown and\n // mouseup never receives its click. A pointer user acts through the row's own menu,\n // which selects explicitly before it opens.\n const hoverAt = (at) => ui.engine.dispatch(new SetLaunchIndexAction(at));\n // Moving the highlight and selecting what it lands on are one action, not two. The index\n // wraps, so only the store can say where a move ends up — and reading that back out here\n // would read it before the dispatch had applied. See MoveLaunchAction.\n const selectAt = (at) => ui.engine.dispatch(new SelectLaunchAction(at, flat[at]?.node));\n const move = (delta) => ui.engine.dispatch(new MoveLaunchAction(delta, flat.map((i) => i.node)));\n // The view gets a say in what an arrow key means — one row down is one tile down in a\n // grid, not one tile across — but the index, the selection and the wrapping stay here, so\n // up and down mean the same thing whichever view is showing.\n const onKey = (e) => {\n // `textual`: there is text in the box, so left/right are the caret's and no view\n // may claim them. Fixing a typo must not move the highlight.\n const claimed = ARROWS.has(e.key)\n ? viewMove(view, e.key, { index: idx, count: flat.length, textual: q.length > 0 })\n : null;\n if (claimed !== null) { e.preventDefault(); move(claimed); }\n else if (e.key === 'ArrowDown') { e.preventDefault(); move(1); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); move(-1); }\n else if (e.key === 'Enter') { e.preventDefault(); activate(ui, flat[idx]); }\n else if (e.key === 'Escape' && q) { e.preventDefault(); clearSearch(ui, timerKey); }\n // The row under the highlight is the subject of the row menu, so the key that opens\n // one on every other list opens this one too — without making the user leave the\n // search box to reach it.\n else if (e.key === 'ContextMenu' || (e.shiftKey && e.key === 'F10')) {\n const it = flat[idx];\n // Arrowing here already selected the row, so the menu acts on the right thing.\n if (it?.menu) { e.preventDefault(); openRowMenu(document.querySelector('.launch-item.active, .grid-tile.active'), it, ui); }\n }\n };\n\n // What the server actually searched (transformer output) — shown when it differs\n // from what the user typed, so an LLM-assisted transform stays honest.\n const resolved = mode === 'search' ? state.se.resolved : null;\n const showResolved = resolved && (resolved.source === 'llm'\n || (resolved.tagFilters && resolved.tagFilters.length)\n || (resolved.semanticText || '').trim() !== q.trim());\n\n const inner = div({ className: 'launcher' },\n div({ className: 'launch-box' },\n icon(mode === 'command' ? 'command' : mode === 'filter' ? 'tag' : 'search', { size: 18 }),\n // `false`, not `'false'`: this is set as a property, and the string is truthy —\n // so the search box had spellcheck ON, red-underlining every filename typed into it.\n input({ className: 'launch-input', value: q, autofocus: true, spellcheck: false,\n placeholder: promptFor(state.caps, { compact: state.vp?.mode === 'phone', modal }) })\n .on({ input: onInput, keydown: onKey }),\n q ? button({ className: 'launch-clear', title: 'Clear' }, icon('close', { size: 14 }))\n .on({ click: () => clearSearch(ui, timerKey) }) : null,\n // Only where the browser can transcribe WITHOUT sending audio anywhere. A remote's\n // own mic needs no button from us — it dictates into this field once it is focused,\n // which is what `search.voice` is really for.\n state.voice?.canListen\n ? button({\n className: `launch-mic ${state.voice?.listening ? 'on' : ''}`,\n title: state.voice?.listening ? 'Stop listening' : 'Search by voice',\n 'aria-pressed': state.voice?.listening ? 'true' : 'false',\n }, icon('mic', { size: 15 })).on({ click: () => ui.engine.dispatch(new ExecCommandAction('search.voice')) })\n : null,\n // Which way to look at the drive. Not in the modal search, where the answer is\n // always \"the one thing I am about to press Enter on\".\n modal ? null : viewSwitcher(state.views, view, ui, { mode }),\n ),\n showResolved ? resolvedBar(resolved) : null,\n // The results belong to the active view — see ui/components/views. The launcher says\n // WHAT is on screen (these groups, this highlight); the view says how it looks. That\n // split is why a gallery is a contribution rather than another branch in here.\n div({ className: 'launch-body' },\n renderView(view, { groups, index: idx, handlers: { hover: hoverAt, select: selectAt }, state, ui }),\n searchHelp(content.help, ui),\n ),\n );\n return modal ? inner : div({ className: 'editor' }, inner);\n}\n\n// An \"under-bar\" reflecting what the search actually ran (the transformer's output):\n// the semantic text it searched for + any tag filters it applied. Read-only and\n// honest — we don't rewrite the user's input, we just show what was dispatched.\nfunction resolvedBar(r) {\n return div({ className: 'launch-resolved' },\n span({ className: 'rq-label' }, r.source === 'llm' ? 'Interpreted as' : 'Searching'),\n (r.semanticText || '').trim() ? span({ className: 'rq-text' }, `“${r.semanticText.trim()}”`) : null,\n ...(r.tagFilters || []).map((f) => span({ className: 'rq-chip' }, icon('tag', { size: 11 }), filterLabel(f))),\n );\n}\n\n// Keep the drive's idea of \"what is selected\" in step with the highlighted row.\n//\n// The NODE goes along with the id. A search result or a recent can be from a collection\n// that isn't loaded — or a page that isn't — so an id alone is something the explorer\n// cannot resolve, and the commands that act on \"the selection\" then do nothing at all.\n\n/**\n * How this search box works — shown when, and only when, a search came back empty.\n *\n * That is the one moment the syntax is worth explaining: the user asked for something\n * and got nothing, and \"you typed it wrong\" is a real possibility they can act on.\n * Showing it any earlier is a permanent instruction panel above an empty drive, and\n * showing it when there ARE results would be explaining a thing that just worked.\n *\n * The text comes from the server's transformer, so it describes the grammar this\n * deployment actually runs rather than the one this file was written against.\n */\n// Decided by the `launcherContent` query — whether an offer applies, and what the server\n// suggests. This only draws it.\nfunction searchHelp(help, ui) {\n if (!help) return null;\n return div({ className: 'launch-help' },\n help.hint ? div({ className: 'lh-hint' }, icon('info', { size: 13 }), span(help.hint)) : null,\n help.examples.length\n ? div({ className: 'lh-examples' }, ...help.examples.map((ex) =>\n button({ className: 'lh-example', title: ex.label || 'Try this search' },\n span({ className: 'lh-q' }, ex.query),\n ex.label ? span({ className: 'lh-label' }, ex.label) : null,\n ).on({ click: () => activate(ui, ex) })))\n : null,\n );\n}\n\n\n\n\n// The trash is the one place \"delete\" means destroy, so its two verbs live together:\n// put it back, or finish the job on this one item. Emptying the whole trash was\n// previously the only way to purge anything.\n\n\n// Substring-first, then subsequence fuzzy score (0 = no match).\n",
|
|
100
101
|
"import { dd } from '../../runtime.js';\nimport { eventToKey } from '../../platform/keybindings.js';\nimport { icon } from '../icon.js';\nimport { rotationFor } from '../../bl/queries.js';\nimport { watchQuery } from '../../bl/watchQuery.js';\nimport { BeginRotationAction, CancelRotationAction, CopyTextAction, ExecCommandAction, PatchApiKeyDraftAction, RebindKeyAction, RememberOpenerAction, SetSettingAction, SetViewStateAction, ToggleApiKeyCapAction } from '../../bl/actions.js';\n\nconst { div, h2, h3, p, span, select, option, input, label, button, ul, li, code } = dd;\n\nexport default function settingsView(state, ui, regions) {\n const groups = state.settingsGroups || new Map();\n return div({ className: 'editor' },\n div({ className: 'stage' },\n div({ className: 'settings' },\n h2('Settings'),\n p({ className: 'sub' }, 'Preferences are stored in this browser. Plugins contribute their own settings here too.'),\n ...groups.map((g) => group(g, ui)),\n mcpSection(ui, state.caps),\n encryptionSection(state, ui),\n apiKeysSection(state, ui),\n openersSection(state.assoc, ui),\n regions.keybindings(),\n ),\n ),\n );\n}\n\nfunction group(g, ui) {\n return div({ className: 'group' },\n h3(g.category),\n ...g.items.map((s) => setting(s, ui)),\n );\n}\n\nfunction setting(s, ui) {\n return div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, s.title || s.key),\n s.description ? div({ className: 'd' }, s.description) : null,\n ),\n div({ className: 'control' }, control(s, ui)),\n );\n}\n\nfunction control(s, ui) {\n const set = (v) => ui.engine.dispatch(new SetSettingAction(s.key, v));\n if (s.type === 'boolean') {\n return label({ className: 'switch' },\n input({ type: 'checkbox', checked: !!s.value }).on({ change: (e) => set(e.target.checked) }),\n span({ className: 'track' }),\n );\n }\n if (s.type === 'enum') {\n return select({ className: 'input' },\n ...s.enum.map((opt, i) =>\n option({ value: opt, selected: s.value === opt }, (s.enumLabels && s.enumLabels[i]) || opt),\n ),\n ).on({ change: (e) => set(e.target.value) });\n }\n if (s.type === 'number') {\n // Guard against a cleared field (Number('') === 0) or a paste yielding NaN, and\n // clamp to the declared range so downstream consumers never see an invalid value.\n const commit = (e) => {\n let n = Number(e.target.value);\n if (e.target.value === '' || Number.isNaN(n)) { e.target.value = s.value; return; }\n if (s.minimum != null) n = Math.max(s.minimum, n);\n if (s.maximum != null) n = Math.min(s.maximum, n);\n e.target.value = n;\n set(n);\n };\n return input({\n className: 'input', type: 'number', value: s.value,\n $attrs: { min: s.minimum ?? '', max: s.maximum ?? '' },\n }).on({ change: commit });\n }\n return input({ className: 'input', value: s.value ?? '' }).on({ change: (e) => set(e.target.value) });\n}\n// Connecting an AI agent to this drive.\n//\n// Read-only, and deliberately so. Everything here is DEPLOYMENT configuration — which\n// identity provider issues the tokens, where the endpoint lives — supplied by the\n// environment or by whoever constructed the server. Pointing the drive at a different\n// authorization server changes who can reach every file in it, which is a `docker run`\n// decision rather than a preference, and a settings field would make it look otherwise.\n//\n// What this section is FOR is the two questions a self-hoster has and currently cannot\n// answer: what URL do I paste into my assistant, and why does it say 401. The second is\n// why `needsAuthorizationServer` is called out as a problem — a drive with auth on and\n// no authorization server configured looks perfectly set up and cannot work.\n//\n// It reads straight off `capabilities`, which the app already fetched at startup, so\n// there is no loading state and nothing to go stale.\nfunction mcpSection(ui, caps) {\n if (!caps) return null; // capabilities never arrived; the shell has bigger problems\n const mcp = caps.mcp;\n const auth = caps.auth || { authorizationServers: [], source: 'none' };\n if (!mcp?.enabled) {\n return div({ className: 'group' }, h3('AI agents (MCP)'),\n p({ className: 'sub' }, 'MCP is switched off on this server. Set TROVE_MCP=on to enable it.'));\n }\n\n // The \"denied clipboard still has to hand the value over\" reasoning moved into\n // CopyTextAction, which is where the other three copies of it went too.\n const copy = (text) => () => ui.engine.dispatch(new CopyTextAction(text));\n\n const servers = auth.authorizationServers || [];\n // Where the value came from matters when it is wrong: \"we took this from your JWT\n // issuer\" points at a different file than \"you set this\".\n const provenance = auth.source === 'jwt-issuer' ? 'from TROVE_JWT_ISSUER'\n : auth.source === 'configured' ? 'from TROVE_AUTH_SERVER' : null;\n\n return div({ className: 'group' },\n h3('AI agents (MCP)'),\n p({ className: 'sub' }, 'Point an AI assistant at this drive. It signs in as you and sees exactly the collections you can see.'),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Server URL'),\n div({ className: 'd' }, 'Paste this into your assistant\\u2019s MCP settings.'),\n ),\n div({ className: 'control mcp-url' },\n span({ className: 'mono' }, mcp.endpoint),\n button({ className: 'btn small', title: 'Copy' }, icon('link', { size: 13 })).on({ click: copy(mcp.endpoint) }),\n ),\n ),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Sign-in required'),\n div({ className: 'd' }, mcp.requiresAuth\n ? 'Agents must present a token, the same one this browser uses.'\n : 'This drive is open, so agents connect without a token \\u2014 exactly like the web app does.'),\n ),\n div({ className: 'control' }, span({ className: 'mono' }, mcp.requiresAuth ? 'Yes' : 'No')),\n ),\n\n // The failure that looks like success. Before the value, because it is the answer\n // to \"I set this up and my agent just says 401\".\n mcp.needsAuthorizationServer\n ? div({ className: 'mcp-warn' }, icon('warn', { size: 15 }),\n span('This drive requires a token but no authorization server is set, so an agent has '\n + 'nowhere to sign in. Set TROVE_AUTH_SERVER (or TROVE_JWT_ISSUER) to the issuer URL '\n + 'of your identity provider and restart.'))\n : null,\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Authorization server'),\n div({ className: 'd' }, 'Where clients are sent to sign in \\u2014 for the whole drive, not just for agents. '\n + 'Set with TROVE_AUTH_SERVER; defaults to TROVE_JWT_ISSUER when that is set.'),\n ),\n div({ className: 'control' },\n servers.length\n ? span({ className: 'mono' }, servers.join(', ') + (provenance ? ` (${provenance})` : ''))\n : span({ className: 'mono muted' }, 'not set'),\n ),\n ),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Discovery document'),\n div({ className: 'd' }, 'What a client reads to find out how to authenticate (RFC 9728).'),\n ),\n div({ className: 'control mcp-url' }, span({ className: 'mono small' }, auth.metadataUrl)),\n ),\n );\n}\n\n// Default openers per file type — the \"always use this\" choices from the opener\n// chooser. Each row shows the type → viewer; the × forgets it (so the next open of\n// that type asks again). Empty when the user hasn't set any defaults.\n// --- API keys -------------------------------------------------------------------\n\nconst CAPS = [\n { id: 'read', label: 'Read', hint: 'list and download' },\n { id: 'write', label: 'Write', hint: 'upload and rename' },\n { id: 'delete', label: 'Delete', hint: 'trash and purge' },\n { id: 'admin', label: 'Admin', hint: 'includes all of the above' },\n];\n\nconst ANY = '*';\n\nfunction apiKeysSection(state, ui) {\n const keys = state.keys || {};\n\n // Nothing to dispatch from here. The list is loaded by the query's `bootAction` — it\n // arrives because something is LOOKING at it, which is what makes it lazy without a\n // module-level flag and a render with a side effect. See bl/queries.js.\n //\n // A non-admin's 403 is the correct answer rather than an error: the section simply is\n // not part of their settings screen.\n if (keys.forbidden) return null;\n if (keys.error) {\n return div({ className: 'group' },\n h3('API keys'),\n // Said out loud. This used to render nothing at all on any failure, because the\n // catch set `loaded` as well as `error` — so one dropped request left a blank space\n // where the section belongs, with no message and no way to try again.\n p({ className: 'sub' }, `Couldn’t load the key list: ${keys.error}`),\n div({ className: 'keys-actions' },\n button({ className: 'btn' }, 'Try again')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('keys.load')) })),\n );\n }\n if (!keys.loaded) return null;\n\n const collections = state.ex?.collections || [];\n\n return div({ className: 'group' },\n h3('API keys'),\n p({ className: 'sub' },\n 'Give a script or a service access without giving it an account. A key carries '\n + 'capabilities and no identity, so anything it does is attributed to the key rather '\n + 'than to a person \\u2014 and it can only reach the collections you scope it to.'),\n\n keys.minted ? mintedBanner(keys.minted, ui) : null,\n keys.draft ? draftForm(keys, collections, ui) : null,\n\n !keys.draft && !keys.minted\n ? div({ className: 'keys-actions' },\n button({ className: 'btn' }, icon('plus', { size: 14 }), 'New key')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('keys.new')) }))\n : null,\n\n keys.keys?.length\n ? div({ className: 'keys-list' }, ...keys.keys.map((k) => keyRow(k, keys, collections, ui)))\n : div({ className: 'keys-empty' }, 'No keys yet.'),\n );\n}\n\n/**\n * The secret, shown once.\n *\n * Deliberately loud and deliberately blocking the rest of the section: the server stored\n * only a hash, so this is the only moment the value exists anywhere. A quiet row in a\n * table would be dismissed without being copied.\n */\nfunction mintedBanner(minted, ui) {\n const copy = () => ui.engine.dispatch(new CopyTextAction(minted.secret, 'Key copied'));\n return div({ className: 'key-minted' },\n div({ className: 'key-minted-head' },\n icon('warn', { size: 15 }),\n span(`\\u201c${minted.key.name}\\u201d is ready \\u2014 copy it now.`),\n ),\n p({ className: 'key-minted-note' },\n 'This is the only time it can be shown. It is stored as a hash, so it cannot be '\n + 'recovered \\u2014 if it is lost, revoke the key and make another.'),\n div({ className: 'key-secret' },\n code({ className: 'mono' }, minted.secret),\n button({ className: 'btn small', title: 'Copy' }, icon('link', { size: 13 })).on({ click: copy }),\n ),\n div({ className: 'keys-actions' },\n button({ className: 'btn' }, 'Done').on({ click: () => ui.engine.dispatch(new ExecCommandAction('keys.dismissMinted')) }),\n ),\n );\n}\n\nfunction draftForm(keys, collections, ui) {\n const draft = keys.draft;\n // Resolved by the apiKeys view: what this draft would actually grant, or null when it\n // would grant nothing.\n const scopes = keys.draftScopes;\n const ready = !!draft.name.trim() && !!scopes;\n\n return div({ className: 'key-form' },\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Name'),\n div({ className: 'd' }, 'What it is for. This is what the list shows, so make it recognisable.'),\n ),\n div({ className: 'control' },\n input({ className: 'input', value: draft.name, $attrs: { placeholder: 'CI uploader' } })\n .on({ input: (e) => ui.engine.dispatch(new PatchApiKeyDraftAction({ name: e.target.value })) }),\n ),\n ),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Expires after'),\n div({ className: 'd' }, 'Days from now. Leave blank and it never expires.'),\n ),\n div({ className: 'control' },\n input({\n className: 'input', type: 'number', value: draft.expiresInDays,\n $attrs: { min: '1', max: '3650', placeholder: 'never' },\n }).on({ input: (e) => ui.engine.dispatch(new PatchApiKeyDraftAction({ expiresInDays: e.target.value })) }),\n ),\n ),\n\n div({ className: 'key-scopes' },\n div({ className: 'key-scopes-head' },\n div({ className: 't' }, 'What it may do'),\n div({ className: 'd' },\n 'Per collection. A key with nothing ticked grants nothing and cannot be created.'),\n ),\n scopeRow({ id: ANY, name: 'All collections', wildcard: true }, draft, ui),\n ...collections.map((c) => scopeRow(c, draft, ui)),\n ),\n\n div({ className: 'keys-actions' },\n button({ className: 'btn primary', $attrs: ready ? {} : { disabled: 'true' } },\n keys.busy === 'mint' ? 'Creating\\u2026' : 'Create key')\n .on({ click: () => ready && ui.engine.dispatch(new ExecCommandAction('keys.mint')) }),\n button({ className: 'btn' }, 'Cancel').on({ click: () => ui.engine.dispatch(new ExecCommandAction('keys.cancel')) }),\n ),\n );\n}\n\nfunction scopeRow(collection, draft, ui) {\n const held = new Set(draft.caps[collection.id] || []);\n return div({ className: `key-scope ${collection.wildcard ? 'wildcard' : ''}` },\n div({ className: 'key-scope-name' },\n icon(collection.wildcard ? 'grid' : 'files', { size: 14 }),\n span(collection.name || collection.id),\n ),\n div({ className: 'key-scope-caps' },\n ...CAPS.map((c) => label({ className: `cap ${held.has(c.id) ? 'on' : ''}`, title: c.hint },\n input({ type: 'checkbox', checked: held.has(c.id) })\n .on({ change: () => ui.engine.dispatch(new ToggleApiKeyCapAction(collection.id, c.id)) }),\n span(c.label),\n )),\n ),\n );\n}\n\nfunction keyRow(k, keys, collections, ui) {\n const revoked = !!k.revokedAt;\n const expired = k.expiresAt != null && k.expiresAt <= Date.now();\n const dead = revoked || expired;\n return div({ className: `key-row ${dead ? 'dead' : ''}` },\n div({ className: 'key-row-main' },\n div({ className: 'key-row-name' },\n span({ className: 't' }, k.name),\n revoked ? span({ className: 'key-tag' }, 'revoked')\n : expired ? span({ className: 'key-tag' }, 'expired') : null,\n ),\n div({ className: 'key-row-scopes' }, ...scopeSummary(k, collections)),\n div({ className: 'key-row-meta' }, metaLine(k)),\n ),\n !dead\n ? button({\n className: 'btn small danger',\n $attrs: keys.busy === k.id ? { disabled: 'true' } : {},\n }, keys.busy === k.id ? '\\u2026' : 'Revoke').on({ click: () => ui.engine.dispatch(new ExecCommandAction('keys.revoke', k.id)) })\n : null,\n );\n}\n\nfunction scopeSummary(k, collections) {\n // The name if we know it, the id if we do not. A key can outlive the collection it was\n // scoped to, and showing a bare id then is more honest than showing nothing — it is\n // also the thing you would search for to find out what happened to it.\n const nameOf = (id) => collections.find((c) => c.id === id)?.name || id;\n return (k.scopes || []).map((s) => span({ className: 'key-chip' },\n span({ className: 'where' }, s.collectionId === ANY ? 'all collections' : nameOf(s.collectionId)),\n span({ className: 'what' }, s.capabilities.join(' \\u00b7 ')),\n ));\n}\n\nfunction metaLine(k) {\n const when = (ms) => new Date(ms).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n const bits = [`created ${when(k.createdAt)}`];\n if (k.createdBy) bits.push(`by ${k.createdBy}`);\n // \"Never used\" is the more useful of the two facts: it is how you find the key nobody\n // needs and can safely revoke.\n bits.push(k.lastUsedAt ? `last used ${when(k.lastUsedAt)}` : 'never used');\n if (k.expiresAt) bits.push(`expires ${when(k.expiresAt)}`);\n return bits.join(' \\u00b7 ');\n}\n\n/**\n * The open collection's key: which one it is, and moving it to a new one.\n *\n * Only for an encrypted collection, and only for an admin — a non-admin gets a 403 reading\n * the rotation state, which is the correct answer rather than an error, so the section\n * simply is not drawn.\n */\nfunction encryptionSection(state, ui) {\n const collectionId = state.ex?.collectionId;\n const enc = state.ex?.collections?.find((c) => c.id === collectionId)?.encryption;\n if (!enc?.enabled) return null;\n // Watching the query is what LOADS it — its bootAction reads the rotation state and its\n // realization polls while one is running. Nothing fetches while this screen is closed.\n return ui.watch(watchQuery(ui.engine, rotationFor(collectionId)), (rot) => encryptionBody(enc, rot || {}, ui));\n}\n\nfunction encryptionBody(enc, rot, ui) {\n const running = rot.rotation?.status === 'running';\n const est = rot.estimate;\n\n return div({ className: 'group' },\n h3('Encryption'),\n p({ className: 'sub' }, 'Files in this collection are sealed before they leave your browser. The drive holds the key.'),\n\n // The only thing that identifies which key the collection is on, and what a sideloaded\n // object is matched against — so it has to be somewhere findable and copyable.\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Key fingerprint'),\n div({ className: 'd' }, 'Identifies the key this collection is on.'),\n ),\n div({ className: 'control' },\n button({ className: 'btn small', title: 'Copy' }, dd.h('code', enc.fingerprint))\n .on({ click: () => ui.engine.dispatch(new CopyTextAction(enc.fingerprint, 'Fingerprint copied')) }),\n ),\n ),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, running ? 'Rotating the key' : 'Rotate the key'),\n div({ className: 'd' }, running\n ? `${rot.rotation.moved} moved${rot.rotation.failed ? `, ${rot.rotation.failed} failed` : ''} — this continues in the background.`\n : rotationCost(est)),\n ),\n div({ className: 'control' },\n running\n ? button({ className: 'btn small', disabled: !!rot.busy }, 'Stop')\n .on({ click: () => ui.engine.dispatch(new CancelRotationAction()) })\n : button({ className: 'btn small', disabled: !!rot.busy }, 'Rotate')\n .on({ click: () => ui.engine.dispatch(new BeginRotationAction()) }),\n ),\n ),\n running\n ? null\n // Said before it is started rather than after: what has moved stays moved, so this\n // is not a job that can be undone by regretting it.\n : div({},\n rotationBill(est),\n p({ className: 'sub' }, 'Every file is re-sealed under a new key and the old one is retired once nothing is left on it. Files stay readable throughout.'),\n ),\n );\n}\n\n/**\n * What a rotation would cost, before anyone starts one.\n *\n * The server already composes this in words — it knows the provider and its pricing, and\n * whether anyone is billed at all — so this shows what it said rather than recomputing a\n * worse version from a file count. `applicable` is false for a store nobody charges for,\n * where the only cost is time.\n */\nfunction rotationCost(est) {\n if (!est) return 'Re-seals every file under a fresh key.';\n return est.summary || 'Re-seals every file under a fresh key.';\n}\n\n/** The itemised estimate, when the provider charges for the traffic. */\nfunction rotationBill(est) {\n if (!est?.applicable || !(est.lines || []).length) return null;\n return div({ className: 'rot-bill' },\n ...est.lines.map((l) => div({ className: 'rb-line' },\n span(l.label || l.name || ''), span({ className: 'mono' }, l.amount || l.value || ''))),\n est.total ? div({ className: 'rb-line total' }, span('Estimated total'), span({ className: 'mono' }, est.total)) : null,\n // Prices move and this is a guess against a snapshot of them; saying when stops it\n // reading as a quote.\n est.asOf ? div({ className: 'rb-asof' }, `Prices as of ${est.asOf}.`) : null,\n );\n}\n\nfunction openersSection(rows, ui) {\n return div({ className: 'group' },\n h3('Default Openers'),\n rows.length\n ? div({},\n ...rows.map((r) =>\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, r.typeKey),\n div({ className: 'd' }, r.missing ? `${r.openerTitle} (no longer installed)` : `Opens with ${r.openerTitle}`),\n ),\n div({ className: 'control' },\n button({ className: 'iconbtn', title: 'Forget this default' }, icon('close', { size: 14 }))\n .on({ click: () => ui.engine.dispatch(new RememberOpenerAction(r.typeKey, null)) }),\n ),\n ),\n ),\n )\n : p({ className: 'sub', $styling: { margin: 0 } }, 'No default openers set yet. When a file type has more than one viewer, you can pick one and check “Always use this”.'),\n );\n}\n\n// Which shortcut is listening for its new chord. Transient, and still engine state: it\n// decides whether a row renders a `<kbd>` or \"Press keys…\". See bl/viewState.js.\nexport const CAPTURE = 'keybindingCapture';\n\n// Its own region, over the keybindings view and the capture state.\n//\n// Everything a row needs is decided by the query — the command's title, whether the user\n// changed it, and whether another command answers to the same chord. That last one is not\n// something a row could work out for itself: it needs the whole list at once.\n//\n// Rebinding dispatches with the binding ID. The component has never held a binding object,\n// only a description of one, which is the point.\n// Built once and PASSED IN, beside the other regions in ui/compositions/workbench.js. It\n// was built at module scope with `kbRegion ??= region(ui.engine, …)` — right that a region\n// must be built once, wrong about where: at module scope it captures the FIRST `ui` and\n// engine it ever sees and pins them for the module's life, which is the shape `watchQuery`\n// deliberately avoids by keying its cache on the engine. Folding it into the parent\n// settingsView region would also work and costs granularity — a chord capture would\n// re-render the whole settings screen — so it is handed down instead.\n\nexport function keybindingRows(bindings, ui, capturing) {\n const setCapturing = (id) => ui.engine.dispatch(new SetViewStateAction(CAPTURE, id));\n const stop = () => setCapturing(null);\n const rebind = (bindingId, key) => ui.engine.dispatch(new RebindKeyAction(bindingId, key));\n return div({ className: 'group' },\n h3('Keyboard Shortcuts'),\n p({ className: 'sub' }, 'Click a shortcut to record a new one. Esc cancels; Backspace clears it.'),\n // Every binding, not the first 40. The cap was arbitrary and silent — with no \"N\n // more\" anywhere, the shortcuts past it simply did not exist as far as anyone could\n // tell, and one plugin keymap was enough to push real ones off the end.\n ...bindings.map((b) => {\n const listening = capturing === b.bindingId;\n return div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, b.title),\n div({ className: 'd' }, b.command),\n ),\n div({ className: 'control' },\n b.clash && !listening\n ? span({ className: 'kbd-clash', title: 'Another command answers to this shortcut too — the one registered last wins' },\n icon('warn', { size: 12 }))\n : null,\n button({ className: `kbd-edit ${listening ? 'listening' : ''} ${b.clash ? 'clash' : ''}`, title: listening ? 'Press the new shortcut' : 'Click to rebind' },\n listening ? span('Press keys…') : dd.h('kbd', b.label))\n .on({\n click: () => setCapturing(listening ? null : b.bindingId),\n blur: () => { if (listening) stop(); },\n keydown: (e) => {\n if (!listening) return;\n e.preventDefault();\n e.stopPropagation();\n if (e.key === 'Escape') return stop();\n if (e.key === 'Backspace') { rebind(b.bindingId, null); return stop(); }\n // A bare modifier isn't a chord yet — wait for the key it modifies.\n if (['Control', 'Meta', 'Alt', 'Shift'].includes(e.key)) return;\n rebind(b.bindingId, eventToKey(e));\n stop();\n },\n $attach: (el) => { if (listening) queueMicrotask(() => el.focus()); },\n }),\n b.custom\n ? button({ className: 'c-link', title: 'Back to the default' }, 'reset')\n .on({ click: () => { rebind(b.bindingId, null); setCapturing(null); } })\n : null,\n ),\n );\n }),\n );\n}\n",
|
|
101
102
|
"// The only thing on screen until a collection is chosen.\n//\n// Every collection-scoped request names its collection in the path, so before one is\n// known there is no file list to draw, nothing to search, and nowhere to upload to. The\n// old behaviour was to pick something — the remembered one, else `default`, else the\n// first in the list — and that is exactly the guess this replaces: on a shared drive it\n// opened a collection plenty of people could not read, and presented the permission error\n// as their drive.\n//\n// So there are two questions and no guesses. A drive with nothing in it asks for a\n// collection to be made; a drive with several asks which one. Once answered, the choice is\n// remembered in localStorage and this never appears again.\n\nimport { dd } from '../../runtime.js';\nimport { icon } from '../icon.js';\nimport { ExecCommandAction } from '../../bl/actions.js';\n\nconst { div, h2, p, button, span } = dd;\n\nexport default function collectionGate(state, ui) {\n const ex = state.ex || {};\n return div({ className: 'editor' },\n div({ className: 'stage' },\n div({ className: 'gate' },\n ex.gate === 'create' ? createPrompt(ui) : choosePrompt(ex, ui),\n ),\n ),\n );\n}\n\n/**\n * A drive with no collections at all.\n *\n * Only shown to someone who may actually create one — `OpenInitialCollectionAction`\n * sends everyone else to the \"ask an administrator\" message instead, because inviting\n * someone to do a thing they are not allowed to do is worse than saying nothing.\n */\nfunction createPrompt(ui) {\n return div({ className: 'gate-card' },\n div({ className: 'gate-icon' }, icon('files', { size: 26 })),\n h2('Make your first collection'),\n p({ className: 'gate-sub' },\n 'A collection is a backing store you own — a bucket, a directory, a mount. Files '\n + 'live in one, and permissions are granted on one. Nothing can be uploaded until '\n + 'there is somewhere to put it.'),\n div({ className: 'gate-actions' },\n button({ className: 'btn primary' }, icon('plus', { size: 14 }), 'New collection')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('collections.create')) }),\n ),\n );\n}\n\n/** Collections exist, but the user has not said which one they want. */\nfunction choosePrompt(ex, ui) {\n const collections = ex.collections || [];\n return div({ className: 'gate-card' },\n div({ className: 'gate-icon' }, icon('grid', { size: 26 })),\n h2(collections.length === 1 ? 'Open your collection' : 'Choose a collection'),\n p({ className: 'gate-sub' },\n collections.length === 1\n ? 'This is the one you have access to. Opening it will be remembered for next time.'\n : 'Files, search and uploads all belong to one collection. Your choice is remembered '\n + 'for next time, and you can switch from the status bar whenever you like.'),\n div({ className: 'gate-list' },\n ...collections.map((c) => button({ className: 'gate-choice' },\n div({ className: 'gate-choice-main' },\n span({ className: 'n' }, c.name || c.id),\n span({ className: 'd' }, c.driver ? `${c.driver}${c.description ? ` · ${c.description}` : ''}` : (c.description || '')),\n ),\n // What they may do, from the server's own answer — so a read-only collection says\n // so before they open it and find the Upload button missing.\n span({ className: 'gate-caps' }, (c.capabilities || []).join(' · ')),\n ).on({ click: () => ui.engine.dispatch(new ExecCommandAction('collections.switch', c.id)) })),\n ),\n ex.canCreateCollection\n ? div({ className: 'gate-actions' },\n button({ className: 'btn' }, icon('plus', { size: 14 }), 'New collection')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('collections.create')) }),\n )\n : null,\n );\n}\n",
|
|
102
103
|
"import { dd } from '../../runtime.js';\nimport { icon } from '../icon.js';\nimport { ExecCommandAction, OpenPluginPanelAction, RefreshPluginAction, SetPluginSecretAction, SetSettingAction, ShowDialogAction, UninstallPluginAction } from '../../bl/actions.js';\nimport { describeTrust } from '../../bl/trust.js';\n\nconst { div, span, p, button, h2, input, label } = dd;\n\nexport default function pluginsView(state, ui) {\n const plugins = state.plugins || [];\n return div({ className: 'editor' },\n div({ className: 'stage' },\n div({ className: 'plugins' },\n h2('Plugins'),\n p({ className: 'sub', $styling: { color: 'var(--text-dim)', margin: '0 0 8px' } },\n 'Plugins are sandboxed packages you install from a file or URL. They run in an isolated iframe and reach Trove only through a message channel, using the capabilities you granted.'),\n div({ className: 'plugin-install' },\n button({ className: 'btn primary' }, icon('upload', { size: 15 }), 'Install from file…')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('plugins.installFromFile')) }),\n button({ className: 'btn' }, icon('plug', { size: 15 }), 'Install from URL…')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('plugins.installFromUrl')) }),\n ),\n plugins.length\n ? div({ $styling: { display: 'flex', 'flex-direction': 'column', gap: '12px', 'margin-top': '14px' } }, ...plugins.map((pl) => installedCard(pl, state, ui)))\n : div({ className: 'empty', $styling: { padding: '48px' } }, icon('plug', { size: 30 }), span('No plugins installed yet.')),\n ),\n ),\n );\n}\n\nfunction installedCard(pl, state, ui) {\n const connectivity = !pl.responsive ? 'not responding' : pl.manifest?.online === false ? 'offline' : 'connected';\n const features = pl.features || [];\n return div({ className: 'plugin-card' },\n div({ className: 'top' },\n div({ className: 'avatar' }, (pl.name || '?')[0].toUpperCase()),\n div({ $styling: { flex: '1' } },\n div({ className: 'name' }, pl.name, pl.version ? span({ $styling: { color: 'var(--text-faint)', 'font-weight': '400', 'margin-left': '6px' } }, 'v' + pl.version) : null),\n div({ $styling: { 'font-size': '11px', color: 'var(--text-faint)' } }, pl.id),\n ),\n trustBadge(pl.trust),\n span({ className: `status ${pl.status}` }, pl.status),\n ),\n pl.error ? div({ className: 'desc', $styling: { color: 'var(--danger)' } }, pl.error) : null,\n div({ className: 'caps' }, ...(pl.capabilities || []).map((c) => span({ className: 'cap' }, c))),\n (pl.endpoints || []).length\n ? div({ className: 'plugin-endpoints', $styling: { 'font-size': '11px', color: 'var(--text-faint)', 'margin-top': '2px' } },\n icon('plug', { size: 11 }), ' Network: ', (pl.endpoints || []).map((e) => e.host).join(', '))\n : null,\n pl.status === 'active'\n ? div({ className: 'plugin-features' },\n div({ className: 'pf-head' }, span(`Features · ${connectivity}`), span({ className: 'muted' }, `${features.filter((f) => f.available).length}/${features.length} available`)),\n features.length\n ? div({ className: 'pf-list' }, ...features.map(featureRow))\n : div({ className: 'muted', $styling: { 'font-size': '12px' } }, pl.responsive ? 'No contributions announced.' : 'No manifest received — the plugin may not be running.'),\n )\n : null,\n (pl.settingsSchema || []).length ? settingsSection(pl, ui, state) : null,\n div({ className: 'actions' },\n pl.hasUi ? button({ className: 'btn' }, icon('command', { size: 14 }), 'Open panel').on({ click: () => ui.engine.dispatch(new OpenPluginPanelAction(pl.id)) }) : null,\n button({ className: 'btn' }, icon('refresh', { size: 14 }), 'Refresh').on({ click: () => ui.engine.dispatch(new RefreshPluginAction(pl.id)) }),\n button({ className: 'btn danger' }, 'Uninstall').on({\n click: () => ui.engine.dispatch(new ShowDialogAction({\n kind: 'confirm', title: `Uninstall ${pl.name}?`, danger: true, confirmLabel: 'Uninstall',\n body: 'The plugin and all data it stored will be removed.',\n confirmActions: [new UninstallPluginAction(pl.id)],\n })),\n }),\n ),\n );\n}\n\nfunction settingsSection(pl, ui, state) {\n return div({ className: 'plugin-features' },\n div({ className: 'pf-head' }, span('Settings')),\n div({ $styling: { display: 'flex', 'flex-direction': 'column', gap: '8px' } },\n ...pl.settingsSchema.map((s) => settingRow(pl, s, ui, state)),\n ),\n );\n}\n\nfunction settingRow(pl, s, ui, state) {\n const key = `${pl.id}.${s.key}`;\n const value = s.secret ? '' : (state.settings?.[key] ?? s.default ?? '');\n return div({ className: 'setting', $styling: { padding: '6px 0' } },\n div({ className: 'info' }, div({ className: 't' }, s.title || s.key), s.description ? div({ className: 'd' }, s.description) : null),\n div({ className: 'control' },\n s.secret\n ? input({ className: 'input', type: 'password', placeholder: 'Set secret…' }).on({\n change: (e) => { if (e.target.value) { ui.engine.dispatch(new SetPluginSecretAction(pl.id, s.key, e.target.value)); e.target.value = ''; e.target.placeholder = 'Saved ✓'; } },\n })\n : s.type === 'boolean'\n ? label({ className: 'switch' }, input({ type: 'checkbox', checked: !!value }).on({ change: (e) => ui.engine.dispatch(new SetSettingAction(key, e.target.checked)) }), span({ className: 'track' }))\n : input({ className: 'input', value }).on({ change: (e) => ui.engine.dispatch(new SetSettingAction(key, e.target.value)) }),\n ),\n );\n}\n\n// The compact badge. WHAT the signature means is decided in bl/trust.js — this only\n// chooses how few characters to say it in, which is the part that is genuinely a question\n// about a crowded row. The two badges used to be two `if` ladders maintained separately,\n// and this one was missing the branch that distinguishes a tampered package from an\n// unsigned one.\nfunction trustBadge(trust) {\n if (!trust) return null;\n const t = describeTrust(trust);\n const label = t.status === 'verified' ? t.domain\n : t.status === 'invalid' ? 'invalid signature'\n : t.status;\n return span({ className: `trust ${t.tone}`, title: t.explanation },\n icon(t.icon, { size: 12 }), label);\n}\n\nconst KIND_ICON = { command: 'command', opener: 'file', indexer: 'search', statusItem: 'info' };\nfunction featureRow(f) {\n return div({ className: `pf-row ${f.available ? '' : 'off'}` },\n icon(KIND_ICON[f.kind] || 'command', { size: 13 }),\n span({ className: 'pf-title' }, f.title),\n span({ className: 'pf-kind' }, f.kind),\n f.offline ? span({ className: 'pf-badge offline-ok', title: 'Works offline' }, 'offline ✓') : null,\n span({ className: `pf-dot ${f.available ? 'on' : 'no'}`, title: f.available ? 'Available now' : 'Unavailable now' }),\n );\n}\n",
|
|
@@ -114,7 +115,7 @@
|
|
|
114
115
|
"// Booting a workbench — the whole client, as a function you call with what you want\n// added to it.\n//\n// This used to be `main.js`: a fixed sequence that registered a fixed set of openers\n// and mounted. Which is fine until someone wants to SHIP a different drive — a hosted\n// build with a rich media player, an image-caption indexer and a gallery view — and\n// finds the only way in is to fork the package. Every contribution the built-ins use\n// goes through the same registry a plugin's does, so there was never a technical reason\n// for that; there was only a hard-coded list.\n//\n// import { createWorkbench } from '@3sln/trove/web/workbench.js';\n//\n// createWorkbench({\n// openers: [{ id: 'acme.player', title: 'Player', priority: 60,\n// match: { mime: ['video/*'] }, component: player }],\n// views: [{ id: 'acme.gallery', title: 'Gallery', icon: 'grid', priority: 70,\n// match: { mime: ['image/*'] }, render: gallery }],\n// });\n//\n// Two ways to displace a built-in, both falling out of how the registry already works:\n// register a HIGHER PRIORITY (selection sorts by it, and the user can still pick the\n// plain one from the chooser), or register the SAME ID (the registry is a map, so it is\n// replaced outright). Prefer the first — it leaves the original reachable.\n//\n// These openers and views run IN PROCESS. That is the difference between a build of the\n// app and a plugin, and it cuts both ways: full access to the platform, and no sandbox\n// to catch a mistake. Anything a user installs is a plugin and stays in its frame.\n\nimport { dd, effect } from './runtime.js';\nimport { createPlatform } from './platform/index.js';\nimport { createApp } from './bl/index.js';\nimport {\n NavigateAction, UploadFilesAction, OpenInitialCollectionAction, OpenSearchModalAction,\n OpenInPanelAction, ShowContextMenuAction,\n} from './bl/actions.js';\nimport { parsePackage } from './platform/pluginPackage.js';\nimport workbenchComposition from './ui/compositions/workbench.js';\nimport { registerBuiltinOpeners } from './ui/components/openers/index.js';\nimport { registerBuiltinViews } from './ui/components/views/index.js';\nimport { attachMedia } from './ui/media.js';\n\n/**\n * Build the platform, mount the workbench, and wire the cross-cutting behaviours that\n * belong to no single component — theme, global keybindings, OS drag-and-drop upload,\n * capability probing, the plugin catalog.\n *\n * @param {object} [options]\n * @param {Element} [options.root] where to mount (default `.workbench`)\n * @param {string} [options.baseUrl] API origin (default same-origin)\n * @param {Array} [options.openers] extra openers: `{ id, title, match, priority?, component }`\n * @param {Array} [options.views] extra views: `{ id, title, icon?, match?, priority?, render, move? }`\n * @param {Array} [options.settings] extra setting schemas, for whatever those contribute\n * @param {boolean} [options.serviceWorker] register /sw.js (default true)\n * @param {boolean} [options.debug] install `window.__trove` (default off — see below)\n * @returns {{platform: object, engine: object, app: object}}\n */\nexport function createWorkbench({\n root = document.querySelector('.workbench'),\n baseUrl = '',\n openers = [],\n views = [],\n settings = [],\n serviceWorker = true,\n // OFF unless someone asks. `window.__trove` is the one place the entire resource graph —\n // engine, platform, app, plus a direct `plugins.install` from raw bytes that goes around\n // the review dialog — is reachable without a dispatch, and it shipped unconditionally in\n // the production bundle. The global is how automation asks: Playwright's `addInitScript`\n // sets it before any page script runs, and a developer can set it and reload. Nothing an\n // attacker controls can set a global in this origin, and a person with our console open\n // can already do all of it.\n debug = globalThis.__troveDebug === true,\n} = {}) {\n const platform = createPlatform({ baseUrl });\n const { engine, app } = createApp(platform);\n\n // Built-in openers and views are UI, so they register from the composition layer\n // (which is allowed to know both platform and ui) rather than from bl/.\n registerBuiltinOpeners(platform);\n registerBuiltinViews(platform);\n // Then whatever this build adds, so a same-id registration replaces the built-in\n // rather than being replaced by it.\n register(platform, 'opener', openers);\n register(platform, 'view', views);\n if (settings.length) platform.settings.register(settings);\n\n // Plugins are installed by the user (from a .zip or a URL) and persisted locally;\n // restore any that were installed on this device, then run.\n platform.plugins.restore();\n\n // --- mount ----------------------------------------------------------------\n const App = workbenchComposition({ engine, platform });\n dd.reconcile(root, [App()]);\n\n // --- theme ----------------------------------------------------------------\n const applyTheme = () => {\n document.documentElement.dataset.theme = platform.settings.get('workbench.theme') || 'dark';\n };\n applyTheme();\n effect(platform.settings.observe(), () => applyTheme());\n\n // --- form factor ----------------------------------------------------------\n // Watch the window so rotating a phone, or dragging a desktop window narrow, re-picks\n // the shell. Also stamps data-layout on <html> for the CSS half of the same decision.\n platform.viewport.install();\n // Ask once whether this browser can transcribe on-device, so the launcher knows\n // whether to offer a microphone. Nothing is downloaded and no permission is requested\n // — see platform/voice.js.\n platform.voice.refresh().catch(() => {});\n // Remote-control navigation, which switches itself on and off with the TV layout.\n platform.spatialNav.install();\n\n // --- keybindings ----------------------------------------------------------\n platform.keybindings.install(window);\n\n // --- viewer stack ↔ browser history ---------------------------------------\n // Browser back/forward. The panel stack is the only thing that mirrors itself into\n // history, so this reaches it directly rather than through a shell object.\n window.addEventListener('popstate', (e) => app.navigation.onPopState(e));\n installDoubleShift(engine);\n\n // --- service worker (offline shell + pinned files + push) -----------------\n if (serviceWorker && 'serviceWorker' in navigator) {\n window.addEventListener('load', () => navigator.serviceWorker.register('/sw.js').catch(() => {}));\n }\n\n installDragAndDrop(engine);\n\n // --- initial load ---------------------------------------------------------\n // Land on a collection the user can actually read — see OpenInitialCollectionAction.\n //\n // This was an async IIFE whose `try` block held only a comment, so its `catch` was not\n // merely dead but a CLAIM: a reader looking for where boot verifies the server is\n // reachable found \"Cannot reach the Trove server\" and it could never fire. The capability\n // fetch it once guarded belongs to the `capabilities` provider now, whose rejection arm\n // deliberately swallows — whether boot should report an unreachable server is that\n // provider's decision to make, not a wrapper's around one synchronous call.\n engine.dispatch(new OpenInitialCollectionAction());\n\n if (debug) installDebugHandle({ platform, engine, app });\n\n return { platform, engine, app };\n}\n\n/** The automation handle. See the `debug` option — this is not installed by default. */\nfunction installDebugHandle({ platform, engine, app }) {\n window.__trove = {\n platform, engine, app,\n // Test/automation hook: install a package from raw zip bytes.\n test: {\n parsePackage,\n assessTrust: (pkg) => platform.plugins.assessTrust(pkg),\n install: (pkg, opts) => platform.plugins.install(pkg, opts),\n NavigateAction,\n // The intents that take a SUBJECT, and so have no command to execute. Everything\n // else a probe wants is `platform.commands.execute(id)` — the same path a click\n // takes. These dispatch rather than writing state, so the engine sees a probe's\n // actions exactly as it sees a person's.\n open: (node, openerId) => platform.dispatch(new OpenInPanelAction(node, openerId)),\n contextMenu: (items, at) => platform.dispatch(new ShowContextMenuAction(items, at)),\n // Keeping a media element pointed at a URL that still works is the half of signed\n // URLs that only shows up over time, so it is drivable from a probe.\n attachMedia,\n },\n };\n}\n\n/**\n * Register a build's own contributions.\n *\n * `id` is required and it is not a formality: an unaddressed contribution cannot be\n * remembered as someone's default opener, cannot be pinned as their view, and cannot be\n * named in a keymap. Failing here is far better than shipping a build whose media\n * player silently forgets which one the user chose.\n */\nfunction register(platform, type, list) {\n for (const c of list) {\n if (!c?.id) throw new Error(`A ${type} passed to createWorkbench needs an \"id\"`);\n const { id, ...spec } = c;\n platform.contributions.register(id, { type, ...spec });\n }\n}\n\n// Double-shift → modal search overlay (Raycast-style). Two Shift presses within 400ms,\n// with no other key between, open it.\nfunction installDoubleShift(engine) {\n let lastShift = 0;\n window.addEventListener('keydown', (e) => {\n if (e.key === 'Shift' && !e.repeat) {\n const now = Date.now();\n if (now - lastShift < 400) { engine.dispatch(new OpenSearchModalAction()); lastShift = 0; }\n else lastShift = now;\n } else if (e.key !== 'Shift') {\n lastShift = 0;\n }\n });\n}\n\n// Dropping files anywhere on the window uploads them to the open collection.\nfunction installDragAndDrop(engine) {\n let dragDepth = 0;\n window.addEventListener('dragenter', (e) => {\n if (!e.dataTransfer?.types.includes('Files')) return;\n dragDepth++;\n document.body.classList.add('dragging-file');\n });\n window.addEventListener('dragover', (e) => {\n if (e.dataTransfer?.types.includes('Files')) e.preventDefault();\n });\n window.addEventListener('dragleave', () => {\n if (--dragDepth <= 0) {\n dragDepth = 0;\n document.body.classList.remove('dragging-file');\n }\n });\n window.addEventListener('drop', (e) => {\n if (!e.dataTransfer?.files?.length) return;\n e.preventDefault();\n dragDepth = 0;\n document.body.classList.remove('dragging-file');\n // No collection named: UploadFilesAction resolves the open one itself and refuses\n // visibly when there isn't one. Reading it here only to hand it straight back was the\n // drop target knowing where files go, which is the action's business.\n engine.dispatch(new UploadFilesAction(e.dataTransfer.files));\n });\n}\n",
|
|
115
116
|
"// The open-source build's entry point: a workbench with nothing added to it.\n//\n// Everything that used to live here is `createWorkbench` (./workbench.js), which takes\n// the openers and views a build wants to ship. A hosted or bespoke build imports that\n// instead of this file and passes its own — no fork, and the same registry the plugins\n// use.\n\nimport { createWorkbench } from './workbench.js';\n\ncreateWorkbench();\n"
|
|
116
117
|
],
|
|
117
|
-
"mappings": "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SACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,OACA,WACA,cACA,MACA,OACA,MACA,MACA,cACA,UACA,MACA,MACA,MACA,KACA,OACA,MACA,KACA,QACA,KACA,MACA,QACA,QACA,QACA,OACA,OACA,MACA,KACA,OACA,OACA,QACA,KACA,KACA,QACA,SACA,QACA,UACA,OACA,OACA,QACA,KACA,OACA,QACA,SACA,OACA,OACA,SACA,SACA,SACA,UACA,UACA,SACA,WACA,UACA,UACA,OACA,QACA,UACA,WACA,OACA,YACA,SACA,SACA,MACA,SACA,MACA,SACA,MACA,UACA,YACA,YACA,QACA,SACA,SACA,UACA,SACA,YACA,UACA,UACA,YACA,UACA,YACA,WACA,UACA,WACA,QACA,YACA,YACA,SACA,UACE,GC/GJ,SAAS,EAAiB,CAAC,GAAK,UAAU,CAAC,EAAG,CAC5C,eAAe,IAAM,CACnB,GAAI,CAAC,GAAQ,QAAS,EAAG,EAC1B,EAGH,SAAS,EAAkB,CAAC,EAAG,CAC7B,MAAO,KACL,EACE,MACA,CACE,SAAU,CACR,mBAAoB,OACpB,MAAO,OACP,QAAS,MACT,cAAe,UACjB,CACF,EACA,EAAE,SAAU,KAAM,UAAU,GAAO,SAAW,OAAO,CAAK,GAAG,EAC7D;AAAA;AAAA,EACA,GAAO,OAAS,EAClB,EAGJ,SAAS,EAAa,CAAC,EAAO,CAC5B,OACE,GAAS,MAAQ,OAAO,EAAM,UAAY,YAAc,OAAO,EAAM,YAAc,WAahF,SAAS,EAAQ,CAAC,EAAc,CACrC,IAAM,EAAS,GAAc,CAAY,EAAI,CAAC,KAAM,CAAY,EAAI,EAC9D,EAAO,GAAQ,KACrB,GAAI,CAAC,GAAc,CAAI,EACrB,MAAU,MAAM,qEAAqE,EAGvF,MAAO,CAIL,SAAU,OAAO,EAAK,WAAa,WAAa,EAAK,SAAW,GAChE,YAAa,GAAmB,EAAK,CAAC,KACnC,EACH,UAIG,EAAK,QACV,ECpDK,IAAM,GAAU,OAAO,uBAAuB,EAE/C,GAAU,OAAO,uBAAuB,EAGvC,SAA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",
|
|
118
|
-
"debugId": "
|
|
118
|
+
"mappings": "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SACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,OACA,WACA,cACA,MACA,OACA,MACA,MACA,cACA,UACA,MACA,MACA,MACA,KACA,OACA,MACA,KACA,QACA,KACA,MACA,QACA,QACA,QACA,OACA,OACA,MACA,KACA,OACA,OACA,QACA,KACA,KACA,QACA,SACA,QACA,UACA,OACA,OACA,QACA,KACA,OACA,QACA,SACA,OACA,OACA,SACA,SACA,SACA,UACA,UACA,SACA,WACA,UACA,UACA,OACA,QACA,UACA,WACA,OACA,YACA,SACA,SACA,MACA,SACA,MACA,SACA,MACA,UACA,YACA,YACA,QACA,SACA,SACA,UACA,SACA,YACA,UACA,UACA,YACA,UACA,YACA,WACA,UACA,WACA,QACA,YACA,YACA,SACA,UACE,GC/GJ,SAAS,EAAiB,CAAC,GAAK,UAAU,CAAC,EAAG,CAC5C,eAAe,IAAM,CACnB,GAAI,CAAC,GAAQ,QAAS,EAAG,EAC1B,EAGH,SAAS,EAAkB,CAAC,EAAG,CAC7B,MAAO,KACL,EACE,MACA,CACE,SAAU,CACR,mBAAoB,OACpB,MAAO,OACP,QAAS,MACT,cAAe,UACjB,CACF,EACA,EAAE,SAAU,KAAM,UAAU,GAAO,SAAW,OAAO,CAAK,GAAG,EAC7D;AAAA;AAAA,EACA,GAAO,OAAS,EAClB,EAGJ,SAAS,EAAa,CAAC,EAAO,CAC5B,OACE,GAAS,MAAQ,OAAO,EAAM,UAAY,YAAc,OAAO,EAAM,YAAc,WAahF,SAAS,EAAQ,CAAC,EAAc,CACrC,IAAM,EAAS,GAAc,CAAY,EAAI,CAAC,KAAM,CAAY,EAAI,EAC9D,EAAO,GAAQ,KACrB,GAAI,CAAC,GAAc,CAAI,EACrB,MAAU,MAAM,qEAAqE,EAGvF,MAAO,CAIL,SAAU,OAAO,EAAK,WAAa,WAAa,EAAK,SAAW,GAChE,YAAa,GAAmB,EAAK,CAAC,KACnC,EACH,UAIG,EAAK,QACV,ECpDK,IAAM,GAAU,OAAO,uBAAuB,EAE/C,GAAU,OAAO,uBAAuB,EAGvC,SAA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",
|
|
119
|
+
"debugId": "343C4D22F7DBB27E64756E2164756E21",
|
|
119
120
|
"names": []
|
|
120
121
|
}
|