@itwin/core-electron 4.10.0-dev.30 → 4.10.0-dev.32
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/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# Change Log - @itwin/core-electron
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Tue, 22 Oct 2024 20:03:09 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 4.9.5
|
|
6
|
+
Tue, 22 Oct 2024 20:01:40 GMT
|
|
7
|
+
|
|
8
|
+
_Version update only_
|
|
4
9
|
|
|
5
10
|
## 4.9.4
|
|
6
11
|
Wed, 09 Oct 2024 20:22:04 GMT
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
7
|
+
exports.BackendIpcTransport = exports.FrontendIpcTransport = exports.ElectronIpcTransport = void 0;
|
|
8
|
+
exports.initializeIpc = initializeIpc;
|
|
8
9
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
9
10
|
const core_common_1 = require("@itwin/core-common");
|
|
10
11
|
const ElectronPush_1 = require("./ElectronPush");
|
|
@@ -183,5 +184,4 @@ function initializeIpc(protocol) {
|
|
|
183
184
|
transport = core_bentley_1.ProcessDetector.isElectronAppFrontend ? new FrontendIpcTransport(protocol) : new BackendIpcTransport(protocol);
|
|
184
185
|
return transport;
|
|
185
186
|
}
|
|
186
|
-
exports.initializeIpc = initializeIpc;
|
|
187
187
|
//# sourceMappingURL=ElectronIpcTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElectronIpcTransport.js","sourceRoot":"","sources":["../../../src/common/ElectronIpcTransport.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { BentleyError, BentleyStatus, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport {\r\n IModelError, iTwinChannel, RpcPushChannel, RpcPushConnection, RpcRequestFulfillment, RpcSerializedValue, SerializedRpcRequest,\r\n} from \"@itwin/core-common\";\r\nimport { ElectronPushConnection, ElectronPushTransport } from \"./ElectronPush\";\r\nimport { ElectronRpcConfiguration } from \"./ElectronRpcManager\";\r\nimport { ElectronRpcProtocol } from \"./ElectronRpcProtocol\";\r\nimport { ElectronRpcRequest } from \"./ElectronRpcRequest\";\r\n\r\nconst OBJECTS_CHANNEL = iTwinChannel(\"rpc.objects\");\r\nconst DATA_CHANNEL = iTwinChannel(\"rpc.data\");\r\n\r\ninterface PartialPayload { id: string, index: number, data: Uint8Array }\r\n\r\n/** @internal */\r\nexport interface IpcTransportMessage { id: string, parameters?: RpcSerializedValue, result?: RpcSerializedValue }\r\n\r\n/** @internal */\r\nexport abstract class ElectronIpcTransport<TIn extends IpcTransportMessage = IpcTransportMessage, TOut extends IpcTransportMessage = IpcTransportMessage> {\r\n private _partials: Map<string, { message: TIn, received: number } | PartialPayload[]>;\r\n private _removeListeners: VoidFunction[] = [];\r\n protected _protocol: ElectronRpcProtocol;\r\n\r\n public get protocol() { return this._protocol; }\r\n\r\n public sendRequest(request: SerializedRpcRequest) {\r\n const value = this._extractValue(request);\r\n this._send(request, value);\r\n }\r\n\r\n public constructor(protocol: ElectronRpcProtocol) {\r\n this._protocol = protocol;\r\n this._partials = new Map();\r\n this._setupDataChannel();\r\n this._setupObjectsChannel();\r\n this.setupPush();\r\n }\r\n\r\n protected setupPush() { }\r\n\r\n private _setupDataChannel() {\r\n const removeListener = this.protocol.ipcSocket.addListener(DATA_CHANNEL, async (evt: any, chunk: PartialPayload) => {\r\n let pending = this._partials.get(chunk.id);\r\n if (!pending) {\r\n pending = [];\r\n this._partials.set(chunk.id, pending);\r\n }\r\n\r\n if (Array.isArray(pending)) {\r\n pending.push(chunk);\r\n } else {\r\n ++pending.received;\r\n\r\n const value = this._extractValue(pending.message);\r\n value.data[chunk.index] = chunk.data;\r\n\r\n if (pending.received === (value.chunks || 0)) {\r\n this.handleComplete(pending.message.id, evt);\r\n }\r\n }\r\n });\r\n this._removeListeners.push(removeListener);\r\n }\r\n\r\n private _setupObjectsChannel() {\r\n const removeListener = this.protocol.ipcSocket.addListener(OBJECTS_CHANNEL, async (evt: any, message: TIn) => {\r\n const pending = this._partials.get(message.id);\r\n if (pending && !Array.isArray(pending)) {\r\n throw new IModelError(BentleyStatus.ERROR, `Message already received for id \"${message.id}\".`);\r\n }\r\n\r\n const partial = { message, received: 0 };\r\n this._partials.set(message.id, partial);\r\n const value = this._extractValue(partial.message);\r\n\r\n if (pending && Array.isArray(pending)) {\r\n for (const chunk of pending) {\r\n ++partial.received;\r\n value.data[chunk.index] = chunk.data;\r\n }\r\n }\r\n\r\n if (partial.received === (value.chunks || 0)) {\r\n this.handleComplete(message.id, evt);\r\n }\r\n });\r\n this._removeListeners.push(removeListener);\r\n }\r\n\r\n private _extractValue(t: IpcTransportMessage): RpcSerializedValue {\r\n if (t.parameters) {\r\n return t.parameters;\r\n }\r\n\r\n if (t.result) {\r\n return t.result;\r\n }\r\n\r\n throw new IModelError(BentleyStatus.ERROR, \"Unknown value type.\");\r\n }\r\n\r\n private _send(message: IpcTransportMessage, value: RpcSerializedValue, evt?: any) {\r\n const chunks = value.data;\r\n if (chunks.length) {\r\n value.chunks = chunks.length;\r\n value.data = [];\r\n }\r\n\r\n this.performSend(OBJECTS_CHANNEL, message, evt);\r\n\r\n for (let index = 0; index !== chunks.length; ++index) {\r\n const chunk: PartialPayload = { id: message.id, index, data: chunks[index] };\r\n this.performSend(DATA_CHANNEL, chunk, evt);\r\n }\r\n }\r\n\r\n protected performSend(channel: string, message: any, evt: any) {\r\n (evt ? evt.sender : this.protocol.ipcSocket).send(channel, message);\r\n }\r\n\r\n protected abstract handleComplete(id: string, evt: any): void;\r\n\r\n /** @internal */\r\n public sendResponse(message: TOut, evt: any) {\r\n const value = this._extractValue(message);\r\n this._send(message, value, evt);\r\n }\r\n\r\n protected loadMessage(id: string) {\r\n const partial = this._partials.get(id);\r\n if (!partial || Array.isArray(partial)) {\r\n throw new IModelError(BentleyStatus.ERROR, `Incomplete transmission for id \"${id}\".`);\r\n }\r\n\r\n this._partials.delete(id);\r\n return partial.message;\r\n }\r\n\r\n public cleanup() {\r\n this._removeListeners.forEach((removeListener) => removeListener());\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class FrontendIpcTransport extends ElectronIpcTransport<RpcRequestFulfillment> {\r\n private _pushTransport?: ElectronPushTransport;\r\n\r\n protected override setupPush() {\r\n const pushTransport = new ElectronPushTransport(this);\r\n this._pushTransport = pushTransport;\r\n RpcPushChannel.setup(pushTransport);\r\n }\r\n\r\n protected async handleComplete(id: string) {\r\n const message = this.loadMessage(id);\r\n\r\n if (this._pushTransport && this._pushTransport.consume(message)) {\r\n return;\r\n }\r\n\r\n const protocol = this._protocol;\r\n const request = protocol.requests.get(message.id) as ElectronRpcRequest;\r\n request.notifyResponse(message);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class BackendIpcTransport extends ElectronIpcTransport<SerializedRpcRequest, RpcRequestFulfillment> {\r\n private _browserWindow: any;\r\n\r\n protected override setupPush() {\r\n RpcPushConnection.for = (channel, client) => new ElectronPushConnection(channel, client, this);\r\n RpcPushChannel.enabled = true;\r\n }\r\n\r\n protected async handleComplete(id: string, evt: any) {\r\n const message = this.loadMessage(id);\r\n\r\n let response: RpcRequestFulfillment;\r\n try {\r\n const protocol = this._protocol;\r\n response = await protocol.fulfill(message);\r\n } catch (err) {\r\n response = await RpcRequestFulfillment.forUnknownError(message, err);\r\n }\r\n\r\n const raw = response.rawResult;\r\n response.rawResult = undefined; // Otherwise, it will be serialized in IPC layer and large responses will then crash the app\r\n this.sendResponse(response, evt);\r\n response.rawResult = raw;\r\n }\r\n\r\n protected override performSend(channel: string, message: any, evt: any) {\r\n if (evt) {\r\n return super.performSend(channel, message, evt);\r\n }\r\n\r\n this._requireBrowserWindow();\r\n const target = ElectronRpcConfiguration.targetWindowId;\r\n const windows = target ? [this._browserWindow.fromId(target)] : this._browserWindow.getAllWindows();\r\n windows.forEach((window: any) => window.webContents.send(channel, message));\r\n }\r\n\r\n private _requireBrowserWindow() {\r\n if (this._browserWindow) {\r\n return;\r\n }\r\n\r\n try { // Wrapping require in a try/catch signals to webpack that this is only an optional dependency\r\n this._browserWindow = require(\"electron\").BrowserWindow; // eslint-disable-line @typescript-eslint/no-var-requires\r\n } catch (err) {\r\n throw new IModelError(BentleyStatus.ERROR, `Error requiring electron`, () => BentleyError.getErrorProps(err));\r\n }\r\n }\r\n}\r\n\r\nlet transport: ElectronIpcTransport | undefined;\r\n\r\n/** @internal */\r\nexport function initializeIpc(protocol: ElectronRpcProtocol) {\r\n if (transport && transport.protocol !== protocol) {\r\n transport.cleanup();\r\n transport = undefined;\r\n }\r\n\r\n if (undefined === transport)\r\n transport = ProcessDetector.isElectronAppFrontend ? new FrontendIpcTransport(protocol) : new BackendIpcTransport(protocol);\r\n\r\n return transport;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ElectronIpcTransport.js","sourceRoot":"","sources":["../../../src/common/ElectronIpcTransport.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { BentleyError, BentleyStatus, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport {\r\n IModelError, iTwinChannel, RpcPushChannel, RpcPushConnection, RpcRequestFulfillment, RpcSerializedValue, SerializedRpcRequest,\r\n} from \"@itwin/core-common\";\r\nimport { ElectronPushConnection, ElectronPushTransport } from \"./ElectronPush\";\r\nimport { ElectronRpcConfiguration } from \"./ElectronRpcManager\";\r\nimport { ElectronRpcProtocol } from \"./ElectronRpcProtocol\";\r\nimport { ElectronRpcRequest } from \"./ElectronRpcRequest\";\r\n\r\nconst OBJECTS_CHANNEL = iTwinChannel(\"rpc.objects\");\r\nconst DATA_CHANNEL = iTwinChannel(\"rpc.data\");\r\n\r\ninterface PartialPayload { id: string, index: number, data: Uint8Array }\r\n\r\n/** @internal */\r\nexport interface IpcTransportMessage { id: string, parameters?: RpcSerializedValue, result?: RpcSerializedValue }\r\n\r\n/** @internal */\r\nexport abstract class ElectronIpcTransport<TIn extends IpcTransportMessage = IpcTransportMessage, TOut extends IpcTransportMessage = IpcTransportMessage> {\r\n private _partials: Map<string, { message: TIn, received: number } | PartialPayload[]>;\r\n private _removeListeners: VoidFunction[] = [];\r\n protected _protocol: ElectronRpcProtocol;\r\n\r\n public get protocol() { return this._protocol; }\r\n\r\n public sendRequest(request: SerializedRpcRequest) {\r\n const value = this._extractValue(request);\r\n this._send(request, value);\r\n }\r\n\r\n public constructor(protocol: ElectronRpcProtocol) {\r\n this._protocol = protocol;\r\n this._partials = new Map();\r\n this._setupDataChannel();\r\n this._setupObjectsChannel();\r\n this.setupPush();\r\n }\r\n\r\n protected setupPush() { }\r\n\r\n private _setupDataChannel() {\r\n const removeListener = this.protocol.ipcSocket.addListener(DATA_CHANNEL, async (evt: any, chunk: PartialPayload) => {\r\n let pending = this._partials.get(chunk.id);\r\n if (!pending) {\r\n pending = [];\r\n this._partials.set(chunk.id, pending);\r\n }\r\n\r\n if (Array.isArray(pending)) {\r\n pending.push(chunk);\r\n } else {\r\n ++pending.received;\r\n\r\n const value = this._extractValue(pending.message);\r\n value.data[chunk.index] = chunk.data;\r\n\r\n if (pending.received === (value.chunks || 0)) {\r\n this.handleComplete(pending.message.id, evt);\r\n }\r\n }\r\n });\r\n this._removeListeners.push(removeListener);\r\n }\r\n\r\n private _setupObjectsChannel() {\r\n const removeListener = this.protocol.ipcSocket.addListener(OBJECTS_CHANNEL, async (evt: any, message: TIn) => {\r\n const pending = this._partials.get(message.id);\r\n if (pending && !Array.isArray(pending)) {\r\n throw new IModelError(BentleyStatus.ERROR, `Message already received for id \"${message.id}\".`);\r\n }\r\n\r\n const partial = { message, received: 0 };\r\n this._partials.set(message.id, partial);\r\n const value = this._extractValue(partial.message);\r\n\r\n if (pending && Array.isArray(pending)) {\r\n for (const chunk of pending) {\r\n ++partial.received;\r\n value.data[chunk.index] = chunk.data;\r\n }\r\n }\r\n\r\n if (partial.received === (value.chunks || 0)) {\r\n this.handleComplete(message.id, evt);\r\n }\r\n });\r\n this._removeListeners.push(removeListener);\r\n }\r\n\r\n private _extractValue(t: IpcTransportMessage): RpcSerializedValue {\r\n if (t.parameters) {\r\n return t.parameters;\r\n }\r\n\r\n if (t.result) {\r\n return t.result;\r\n }\r\n\r\n throw new IModelError(BentleyStatus.ERROR, \"Unknown value type.\");\r\n }\r\n\r\n private _send(message: IpcTransportMessage, value: RpcSerializedValue, evt?: any) {\r\n const chunks = value.data;\r\n if (chunks.length) {\r\n value.chunks = chunks.length;\r\n value.data = [];\r\n }\r\n\r\n this.performSend(OBJECTS_CHANNEL, message, evt);\r\n\r\n for (let index = 0; index !== chunks.length; ++index) {\r\n const chunk: PartialPayload = { id: message.id, index, data: chunks[index] };\r\n this.performSend(DATA_CHANNEL, chunk, evt);\r\n }\r\n }\r\n\r\n protected performSend(channel: string, message: any, evt: any) {\r\n (evt ? evt.sender : this.protocol.ipcSocket).send(channel, message);\r\n }\r\n\r\n protected abstract handleComplete(id: string, evt: any): void;\r\n\r\n /** @internal */\r\n public sendResponse(message: TOut, evt: any) {\r\n const value = this._extractValue(message);\r\n this._send(message, value, evt);\r\n }\r\n\r\n protected loadMessage(id: string) {\r\n const partial = this._partials.get(id);\r\n if (!partial || Array.isArray(partial)) {\r\n throw new IModelError(BentleyStatus.ERROR, `Incomplete transmission for id \"${id}\".`);\r\n }\r\n\r\n this._partials.delete(id);\r\n return partial.message;\r\n }\r\n\r\n public cleanup() {\r\n this._removeListeners.forEach((removeListener) => removeListener());\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class FrontendIpcTransport extends ElectronIpcTransport<RpcRequestFulfillment> {\r\n private _pushTransport?: ElectronPushTransport;\r\n\r\n protected override setupPush() {\r\n const pushTransport = new ElectronPushTransport(this);\r\n this._pushTransport = pushTransport;\r\n RpcPushChannel.setup(pushTransport);\r\n }\r\n\r\n protected async handleComplete(id: string) {\r\n const message = this.loadMessage(id);\r\n\r\n if (this._pushTransport && this._pushTransport.consume(message)) {\r\n return;\r\n }\r\n\r\n const protocol = this._protocol;\r\n const request = protocol.requests.get(message.id) as ElectronRpcRequest;\r\n request.notifyResponse(message);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class BackendIpcTransport extends ElectronIpcTransport<SerializedRpcRequest, RpcRequestFulfillment> {\r\n private _browserWindow: any;\r\n\r\n protected override setupPush() {\r\n RpcPushConnection.for = (channel, client) => new ElectronPushConnection(channel, client, this);\r\n RpcPushChannel.enabled = true;\r\n }\r\n\r\n protected async handleComplete(id: string, evt: any) {\r\n const message = this.loadMessage(id);\r\n\r\n let response: RpcRequestFulfillment;\r\n try {\r\n const protocol = this._protocol;\r\n response = await protocol.fulfill(message);\r\n } catch (err) {\r\n response = await RpcRequestFulfillment.forUnknownError(message, err);\r\n }\r\n\r\n const raw = response.rawResult;\r\n response.rawResult = undefined; // Otherwise, it will be serialized in IPC layer and large responses will then crash the app\r\n this.sendResponse(response, evt);\r\n response.rawResult = raw;\r\n }\r\n\r\n protected override performSend(channel: string, message: any, evt: any) {\r\n if (evt) {\r\n return super.performSend(channel, message, evt);\r\n }\r\n\r\n this._requireBrowserWindow();\r\n const target = ElectronRpcConfiguration.targetWindowId;\r\n const windows = target ? [this._browserWindow.fromId(target)] : this._browserWindow.getAllWindows();\r\n windows.forEach((window: any) => window.webContents.send(channel, message));\r\n }\r\n\r\n private _requireBrowserWindow() {\r\n if (this._browserWindow) {\r\n return;\r\n }\r\n\r\n try { // Wrapping require in a try/catch signals to webpack that this is only an optional dependency\r\n this._browserWindow = require(\"electron\").BrowserWindow; // eslint-disable-line @typescript-eslint/no-var-requires\r\n } catch (err) {\r\n throw new IModelError(BentleyStatus.ERROR, `Error requiring electron`, () => BentleyError.getErrorProps(err));\r\n }\r\n }\r\n}\r\n\r\nlet transport: ElectronIpcTransport | undefined;\r\n\r\n/** @internal */\r\nexport function initializeIpc(protocol: ElectronRpcProtocol) {\r\n if (transport && transport.protocol !== protocol) {\r\n transport.cleanup();\r\n transport = undefined;\r\n }\r\n\r\n if (undefined === transport)\r\n transport = ProcessDetector.isElectronAppFrontend ? new FrontendIpcTransport(protocol) : new BackendIpcTransport(protocol);\r\n\r\n return transport;\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-electron",
|
|
3
|
-
"version": "4.10.0-dev.
|
|
3
|
+
"version": "4.10.0-dev.32",
|
|
4
4
|
"description": "iTwin.js ElectronHost and ElectronApp",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"url": "http://www.bentley.com"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"@itwin/core-backend": "^4.10.0-dev.
|
|
25
|
-
"@itwin/core-bentley": "^4.10.0-dev.
|
|
26
|
-
"@itwin/core-common": "^4.10.0-dev.
|
|
27
|
-
"@itwin/core-frontend": "^4.10.0-dev.
|
|
24
|
+
"@itwin/core-backend": "^4.10.0-dev.32",
|
|
25
|
+
"@itwin/core-bentley": "^4.10.0-dev.32",
|
|
26
|
+
"@itwin/core-common": "^4.10.0-dev.32",
|
|
27
|
+
"@itwin/core-frontend": "^4.10.0-dev.32",
|
|
28
28
|
"electron": ">=23.0.0 <34.0.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
@@ -39,15 +39,15 @@
|
|
|
39
39
|
"mocha": "^10.2.0",
|
|
40
40
|
"rimraf": "^3.0.2",
|
|
41
41
|
"source-map-loader": "^4.0.0",
|
|
42
|
-
"typescript": "~5.
|
|
42
|
+
"typescript": "~5.6.2",
|
|
43
43
|
"webpack": "^5.76.0",
|
|
44
44
|
"webpack-cli": "^5.0.1",
|
|
45
|
-
"@itwin/build-tools": "4.10.0-dev.
|
|
46
|
-
"@itwin/core-backend": "4.10.0-dev.
|
|
47
|
-
"@itwin/certa": "4.10.0-dev.
|
|
48
|
-
"@itwin/core-bentley": "4.10.0-dev.
|
|
49
|
-
"@itwin/core-common": "4.10.0-dev.
|
|
50
|
-
"@itwin/core-frontend": "4.10.0-dev.
|
|
45
|
+
"@itwin/build-tools": "4.10.0-dev.32",
|
|
46
|
+
"@itwin/core-backend": "4.10.0-dev.32",
|
|
47
|
+
"@itwin/certa": "4.10.0-dev.32",
|
|
48
|
+
"@itwin/core-bentley": "4.10.0-dev.32",
|
|
49
|
+
"@itwin/core-common": "4.10.0-dev.32",
|
|
50
|
+
"@itwin/core-frontend": "4.10.0-dev.32"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"@openid/appauth": "^1.2.6",
|