1
0
Fork 0
mirror of https://github.com/anyproto/anytype-ts.git synced 2025-06-08 05:57:02 +09:00

Merge pull request #1456 from anyproto/grpc-dev-tools

add grpc devtools extension
This commit is contained in:
Razor 2025-06-05 19:16:58 +02:00 committed by GitHub
commit 74fad999d6
Signed by: github
GPG key ID: B5690EEEBB952194
7 changed files with 167 additions and 7 deletions

View file

@ -13,6 +13,10 @@ const Store = require('electron-store');
const suffix = app.isPackaged ? '' : 'dev';
const store = new Store({ name: [ 'localStorage', suffix ].join('-') });
// gRPC DevTools extension ID
const GRPC_DEVTOOLS_ID = 'fohdnlaeecihjiendkfhifhlgldpeopm';
const { installExtension } = require('@tomjs/electron-devtools-installer');
// Fix notifications app name
if (is.windows) {
app.setAppUserModelId(app.name);
@ -182,7 +186,7 @@ function createWindow () {
});
};
app.on('ready', () => {
app.on('ready', async () => {
session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
callback({
responseHeaders: {
@ -192,6 +196,22 @@ app.on('ready', () => {
});
});
// Load gRPC DevTools extension in development mode
if (is.development) {
try {
// Install the extension using electron-devtools-installer
await installExtension(GRPC_DEVTOOLS_ID, {
loadExtensionOptions: {
allowFileAccess: true
}
});
console.log(`✅ gRPC DevTools extension installed`);
} catch (e) {
console.error('❌ Failed to install gRPC DevTools extension:', e.message);
};
};
ConfigManager.init(waitForLibraryAndCreateWindows);
});
@ -242,4 +262,4 @@ app.on('open-url', (e, url) => {
Util.send(mainWindow, 'route', Util.getRouteFromUrl(url));
mainWindow.show();
};
});
});

View file

@ -54,7 +54,8 @@
"https://s1.hdslb.com",
"https://static.sketchfab.com",
"https://*.diagrams.net",
"https://*.bstarstatic.com"
"https://*.bstarstatic.com",
"chrome-extension://fohdnlaeecihjiendkfhifhlgldpeopm/"
],
"font-src": [
@ -168,7 +169,8 @@
"https://*.bstarstatic.com",
"https://*.googletagmanager.com",
"https://*.facebook.net",
"https://*.diagrams.net"
"https://*.diagrams.net",
"chrome-extension://fohdnlaeecihjiendkfhifhlgldpeopm/"
],
"frame-src": [
@ -195,8 +197,9 @@
"https://cdpn.io",
"https://kroki.io",
"https://sketchfab.com",
"https://*.diagrams.net"
],
"https://*.diagrams.net",
"chrome-extension://fohdnlaeecihjiendkfhifhlgldpeopm/"
],
"worker-src": [
"'self'",

107
package-lock.json generated
View file

@ -87,6 +87,7 @@
"@rspack/cli": "^1.1.0",
"@rspack/core": "^1.1.0",
"@rspack/plugin-react-refresh": "^1.0.0",
"@tomjs/electron-devtools-installer": "^3.0.1",
"@types/history": "^4.7.8",
"@types/jquery": "^3.5.14",
"@types/katex": "^0.14.0",
@ -2086,6 +2087,35 @@
"node": ">=10"
}
},
"node_modules/@tomjs/electron-devtools-installer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@tomjs/electron-devtools-installer/-/electron-devtools-installer-3.0.1.tgz",
"integrity": "sha512-eFrCiDfA5KAkAQIDX8gzcPiFZ38YP+hhhIJuzVHQg0c58m8YsM/UJNFpiHuZgnCBkm2lgH85vYaprY6+cjxiwA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@tomjs/unzip-crx": "^1.1.3"
},
"engines": {
"node": ">=16"
},
"peerDependencies": {
"electron": ">=12.0.0"
}
},
"node_modules/@tomjs/unzip-crx": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@tomjs/unzip-crx/-/unzip-crx-1.1.3.tgz",
"integrity": "sha512-uqolp78TcG5q2ZBOZ57Nf7m7o3kaKAz1E9uFf4FCSO/nCI11HaDWpw7PaGUk1MImeIjNradiLpT2b9kTKSs4uw==",
"dev": true,
"license": "MIT",
"dependencies": {
"jszip": "^3.10.1"
},
"engines": {
"node": ">=14"
}
},
"node_modules/@tootallnate/once": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
@ -10610,6 +10640,76 @@
"node": ">=4.0"
}
},
"node_modules/jszip": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"dev": true,
"license": "(MIT OR GPL-3.0-or-later)",
"dependencies": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"setimmediate": "^1.0.5"
}
},
"node_modules/jszip/node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"dev": true,
"license": "MIT"
},
"node_modules/jszip/node_modules/lie": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"immediate": "~3.0.5"
}
},
"node_modules/jszip/node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true,
"license": "(MIT AND Zlib)"
},
"node_modules/jszip/node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/jszip/node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true,
"license": "MIT"
},
"node_modules/jszip/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/katex": {
"version": "0.16.22",
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz",
@ -18158,6 +18258,13 @@
"node": ">= 0.4"
}
},
"node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"dev": true,
"license": "MIT"
},
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",

View file

@ -54,6 +54,7 @@
"@rspack/cli": "^1.1.0",
"@rspack/core": "^1.1.0",
"@rspack/plugin-react-refresh": "^1.0.0",
"@tomjs/electron-devtools-installer": "^3.0.1",
"@types/history": "^4.7.8",
"@types/jquery": "^3.5.14",
"@types/katex": "^0.14.0",

View file

@ -8,6 +8,7 @@ import Service from 'dist/lib/pb/protos/service/service_grpc_web_pb';
import { I, M, S, U, J, analytics, Renderer, Action, Dataview, Mapper, keyboard, Preview, focus } from 'Lib';
import * as Response from './response';
import { ClientReadableStream } from 'grpc-web';
import { unaryInterceptors, streamInterceptors } from './grpc-devtools';
const SORT_IDS = [
'BlockAdd',
@ -39,7 +40,10 @@ class Dispatcher {
return;
};
this.service = new Service.ClientCommandsClient(address, null, null);
this.service = new Service.ClientCommandsClient(address, null, {
unaryInterceptors,
streamInterceptors,
});
};
startStream () {

7
src/ts/lib/api/grpc-devtools.d.ts vendored Normal file
View file

@ -0,0 +1,7 @@
// Type augmentation for grpc-web to include interceptor options
declare module 'grpc-web' {
interface GrpcWebClientBaseOptions {
unaryInterceptors?: UnaryInterceptor<any, any>[];
streamInterceptors?: StreamInterceptor<any, any>[];
}
}

View file

@ -0,0 +1,18 @@
import type { UnaryInterceptor, StreamInterceptor } from 'grpc-web';
declare const __gRPC_devtools__:
| undefined
| {
gRPCWebUnaryInterceptor: UnaryInterceptor<unknown, unknown>;
gRPCWebStreamInterceptor: StreamInterceptor<unknown, unknown>;
};
export const unaryInterceptors =
typeof __gRPC_devtools__ === 'object'
? [__gRPC_devtools__.gRPCWebUnaryInterceptor]
: [];
export const streamInterceptors =
typeof __gRPC_devtools__ === 'object'
? [__gRPC_devtools__.gRPCWebStreamInterceptor]
: [];