diff --git a/app/client/lib/SafeBrowser.ts b/app/client/lib/SafeBrowser.ts index a33f23d9..e980d5bb 100644 --- a/app/client/lib/SafeBrowser.ts +++ b/app/client/lib/SafeBrowser.ts @@ -40,7 +40,7 @@ import { getOriginUrl } from 'app/common/urlUtils'; import { GristAPI, RPC_GRISTAPI_INTERFACE } from 'app/plugin/GristAPI'; import { RenderOptions, RenderTarget } from 'app/plugin/RenderOptions'; import { checkers } from 'app/plugin/TypeCheckers'; -import { IpcMessageEvent, WebviewTag } from 'electron'; +import { IpcMessageEvent } from 'electron'; import { IMsgCustom, IMsgRpcCall, Rpc } from 'grain-rpc'; import { Disposable } from './dispose'; const G = getBrowserGlobals('document', 'window'); @@ -305,7 +305,7 @@ class IframeProcess extends ViewProcess { class WebviewProcess extends ViewProcess { public create(safeBrowser: SafeBrowser, rpc: Rpc, src: string) { super.create(safeBrowser, rpc, src); - const webview: WebviewTag = this.element = this.autoDispose(dom('webview.safe_browser_process.clipboard_focus', { + const webview = this.element = this.autoDispose(dom('webview.safe_browser_process.clipboard_focus', { src, allowpopups: '', // Requests with this partition get an extra header (see main.js) to get access to plugin content. diff --git a/app/server/lib/DocStorageManager.ts b/app/server/lib/DocStorageManager.ts index 863523be..24c8628e 100644 --- a/app/server/lib/DocStorageManager.ts +++ b/app/server/lib/DocStorageManager.ts @@ -43,7 +43,7 @@ export class DocStorageManager implements IDocStorageManager { // If we have a way to communicate with clients, watch the docsRoot for changes. this._watcher = null; this._shell = gristServer?.create.Shell?.() || { - moveItemToTrash() { throw new Error('Unable to move document to trash'); }, + trashItem() { throw new Error('Unable to move document to trash'); }, showItemInFolder() { throw new Error('Unable to show item in folder'); } }; if (_comm) { @@ -118,16 +118,15 @@ export class DocStorageManager implements IDocStorageManager { * @param {String} docName: docName of the document to delete. * @returns {Promise} Resolved on success. */ - public deleteDoc(docName: string, deletePermanently?: boolean): Promise { + public async deleteDoc(docName: string, deletePermanently?: boolean): Promise { const docPath = this.getPath(docName); // Keep this check, to protect against wiping out the whole disk or the user's home. if (path.extname(docPath) !== '.grist') { return Promise.reject(new Error("Refusing to delete path which does not end in .grist")); } else if (deletePermanently) { - return fse.remove(docPath); + await fse.remove(docPath); } else { - this._shell.moveItemToTrash(docPath); // this is a synchronous action - return Promise.resolve(); + await this._shell.trashItem(docPath); } } diff --git a/app/server/lib/FlexServer.ts b/app/server/lib/FlexServer.ts index 51bd2dd4..e377b0ed 100644 --- a/app/server/lib/FlexServer.ts +++ b/app/server/lib/FlexServer.ts @@ -190,6 +190,29 @@ export class FlexServer implements GristServer { this._pluginUrl = options.pluginUrl || process.env.APP_UNTRUSTED_URL; this.info.push(['pluginUrl', this._pluginUrl]); + // The electron build is not supported at this time, but this stub + // implementation of electronServerMethods is present to allow kicking + // its tires. + let userConfig: any = { + recentItems: [], + }; + this.electronServerMethods = { + async importDoc() { throw new Error('not implemented'); }, + onDocOpen(cb) { + // currently only a stub. + cb(''); + }, + async getUserConfig() { + return userConfig; + }, + async updateUserConfig(obj: any) { + userConfig = obj; + }, + onBackupMade() { + log.info('backup skipped'); + } + }; + this.app.use((req, res, next) => { (req as RequestWithGrist).gristServer = this; next(); @@ -1790,7 +1813,7 @@ function noCaching(req: express.Request, res: express.Response, next: express.Ne // Methods that Electron app relies on. export interface ElectronServerMethods { importDoc(filepath: string): Promise; - onDocOpen(cb: () => void): void; + onDocOpen(cb: (filePath: string) => void): void; getUserConfig(): Promise; updateUserConfig(obj: any): Promise; onBackupMade(cb: () => void): void; diff --git a/app/server/lib/IShell.ts b/app/server/lib/IShell.ts index 4a3a6e0d..e647171e 100644 --- a/app/server/lib/IShell.ts +++ b/app/server/lib/IShell.ts @@ -1,4 +1,4 @@ export interface IShell { - moveItemToTrash(docPath: string): void; + trashItem(docPath: string): Promise; showItemInFolder(docPath: string): void; } diff --git a/app/server/mergedServerMain.ts b/app/server/mergedServerMain.ts index 8b482e3b..f31691cd 100644 --- a/app/server/mergedServerMain.ts +++ b/app/server/mergedServerMain.ts @@ -88,7 +88,7 @@ export async function main(port: number, serverTypes: ServerType[], await server.addAssetsForPlugins(); } - if (includeHome && !includeApp) { + if (includeHome) { server.addEarlyWebhooks(); } @@ -103,21 +103,17 @@ export async function main(port: number, serverTypes: ServerType[], await server.start(); if (includeHome) { - if (!includeApp) { - server.addUsage(); - } + server.addUsage(); if (!includeDocs) { server.addDocApiForwarder(); } server.addJsonSupport(); await server.addLandingPages(); // todo: add support for home api to standalone app - if (!includeApp) { - server.addHomeApi(); - server.addBillingApi(); - server.addNotifier(); - await server.addHousekeeper(); - } + server.addHomeApi(); + server.addBillingApi(); + server.addNotifier(); + await server.addHousekeeper(); await server.addLoginRoutes(); server.addAccountPage(); server.addBillingPages();