@jupyterlab/services
Advanced tools
@@ -111,2 +111,3 @@ import { JSONObject } from '@lumino/coreutils'; | ||
| private _maybeStartSubshell; | ||
| private _closePerCommTargetSubshell; | ||
| private _maybeCloseSubshell; | ||
@@ -113,0 +114,0 @@ private _subshellStarted; |
+97
-26
@@ -100,9 +100,15 @@ "use strict"; | ||
| set commsOverSubshells(value) { | ||
| if (value === this._commsOverSubshells) { | ||
| // Do nothing if the value is not changing. | ||
| return; | ||
| } | ||
| const closePromise = this._maybeCloseSubshell(this._commsOverSubshells); | ||
| this._commsOverSubshells = value; | ||
| if (this._commsOverSubshells === CommsOverSubshells.Disabled) { | ||
| this._maybeCloseSubshell(); | ||
| } | ||
| else { | ||
| void this._maybeStartSubshell(); | ||
| } | ||
| closePromise | ||
| .then(() => { | ||
| if (this._commsOverSubshells !== CommsOverSubshells.Disabled) { | ||
| void this._maybeStartSubshell(); | ||
| } | ||
| }) | ||
| .catch(console.warn); | ||
| } | ||
@@ -257,3 +263,3 @@ /** | ||
| dispose() { | ||
| this._maybeCloseSubshell(); | ||
| void this._maybeCloseSubshell(this._commsOverSubshells); | ||
| super.dispose(); | ||
@@ -280,2 +286,3 @@ } | ||
| // One shell per comm-target | ||
| const subshellStarted = this._subshellStarted; | ||
| const kernelId = this._kernel.id; | ||
@@ -285,29 +292,93 @@ if (!CommHandler._commTargetSubShellsId.hasOwnProperty(kernelId)) { | ||
| } | ||
| const kernelCommTargetSubShells = CommHandler._commTargetSubShellsId[kernelId]; | ||
| if (kernelCommTargetSubShells[this._target]) { | ||
| this._subshellId = await kernelCommTargetSubShells[this._target]; | ||
| this._subshellStarted.resolve(); | ||
| const kernelCommTargetSubshells = CommHandler._commTargetSubShellsId[kernelId]; | ||
| const existingEntry = kernelCommTargetSubshells[this._target]; | ||
| if (existingEntry) { | ||
| existingEntry.referenceCount += 1; | ||
| try { | ||
| this._subshellId = await existingEntry.subshellId; | ||
| subshellStarted.resolve(); | ||
| } | ||
| catch (e) { | ||
| // If the future rejected we need to close the subshell to avoid leaks | ||
| await this._closePerCommTargetSubshell(false); | ||
| subshellStarted.reject(`Per comm-target subshell creation failed: ${e}`); | ||
| } | ||
| return; | ||
| } | ||
| else { | ||
| // Create subshell | ||
| kernelCommTargetSubShells[this._target] = this._kernel | ||
| const entry = { | ||
| subshellId: this._kernel | ||
| .requestCreateSubshell({}) | ||
| .done.then(replyMsg => { | ||
| this._subshellId = replyMsg.content.subshell_id; | ||
| return this._subshellId; | ||
| }); | ||
| await kernelCommTargetSubShells[this._target]; | ||
| this._subshellStarted.resolve(); | ||
| .done.then(replyMsg => replyMsg.content.subshell_id), | ||
| referenceCount: 1 | ||
| }; | ||
| kernelCommTargetSubshells[this._target] = entry; | ||
| try { | ||
| this._subshellId = await entry.subshellId; | ||
| subshellStarted.resolve(); | ||
| } | ||
| catch (e) { | ||
| // If the future rejected we need to close the subshell to avoid leaks | ||
| await this._closePerCommTargetSubshell(false); | ||
| subshellStarted.reject(`Per comm-target subshell creation failed: ${e}`); | ||
| } | ||
| } | ||
| _maybeCloseSubshell() { | ||
| // Only close subshell if we have one subshell per comm | ||
| if (this._commsOverSubshells !== CommsOverSubshells.PerComm) { | ||
| async _closePerCommTargetSubshell(shouldAskKernelToDelete = true) { | ||
| const kernelId = this._kernel.id; | ||
| const target = this._target; | ||
| if (CommHandler._commTargetSubShellsId.hasOwnProperty(kernelId)) { | ||
| // Close the subshell for this target if this is the last comm. | ||
| const kernelTargets = CommHandler._commTargetSubShellsId[kernelId]; | ||
| const entry = kernelTargets[target]; | ||
| if (entry) { | ||
| entry.referenceCount -= 1; | ||
| if (entry.referenceCount <= 0) { | ||
| if (shouldAskKernelToDelete) { | ||
| let subshellId = null; | ||
| try { | ||
| subshellId = await entry.subshellId; | ||
| } | ||
| catch (e) { | ||
| console.warn(`Subshell identifier not available in the closeout sequence, will not request deletion: ${e}`); | ||
| } | ||
| if (subshellId !== null) { | ||
| this._kernel.requestDeleteSubshell({ subshell_id: subshellId }, true); | ||
| } | ||
| } | ||
| delete kernelTargets[target]; | ||
| } | ||
| } | ||
| if (Object.keys(kernelTargets).length === 0) { | ||
| delete CommHandler._commTargetSubShellsId[kernelId]; | ||
| } | ||
| // Clear identifier | ||
| this._subshellId = null; | ||
| } | ||
| // Restart promise delegate to subsequent startup | ||
| this._subshellStarted = new coreutils_1.PromiseDelegate(); | ||
| } | ||
| async _maybeCloseSubshell(mode) { | ||
| if (this._kernel.status === 'dead') { | ||
| return; | ||
| } | ||
| if (this._subshellId && this._kernel.status !== 'dead') { | ||
| this._kernel.requestDeleteSubshell({ subshell_id: this._subshellId }, true); | ||
| switch (mode) { | ||
| case CommsOverSubshells.PerComm: { | ||
| if (this._subshellId) { | ||
| // Close the only subshell | ||
| this._kernel.requestDeleteSubshell({ subshell_id: this._subshellId }, true); | ||
| // Clear identifier | ||
| this._subshellId = null; | ||
| } | ||
| // Restart promise delegate to subsequent startup | ||
| this._subshellStarted = new coreutils_1.PromiseDelegate(); | ||
| break; | ||
| } | ||
| case CommsOverSubshells.PerCommTarget: { | ||
| await this._closePerCommTargetSubshell(); | ||
| break; | ||
| } | ||
| case CommsOverSubshells.Disabled: { | ||
| // no-op | ||
| break; | ||
| } | ||
| } | ||
| this._subshellId = null; | ||
| } | ||
@@ -314,0 +385,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"comm.js","sourceRoot":"","sources":["../../src/kernel/comm.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"comm.js","sourceRoot":"","sources":["../../src/kernel/comm.ts"],"names":[],"mappings":"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"} |
+6
-6
| { | ||
| "name": "@jupyterlab/services", | ||
| "version": "7.5.4", | ||
| "version": "7.5.5", | ||
| "description": "Client APIs for the Jupyter services REST APIs", | ||
@@ -49,6 +49,6 @@ "keywords": [ | ||
| "@jupyter/ydoc": "^3.1.0", | ||
| "@jupyterlab/coreutils": "^6.5.4", | ||
| "@jupyterlab/nbformat": "^4.5.4", | ||
| "@jupyterlab/settingregistry": "^4.5.4", | ||
| "@jupyterlab/statedb": "^4.5.4", | ||
| "@jupyterlab/coreutils": "^6.5.5", | ||
| "@jupyterlab/nbformat": "^4.5.5", | ||
| "@jupyterlab/settingregistry": "^4.5.5", | ||
| "@jupyterlab/statedb": "^4.5.5", | ||
| "@lumino/coreutils": "^2.2.2", | ||
@@ -62,3 +62,3 @@ "@lumino/disposable": "^2.1.5", | ||
| "devDependencies": { | ||
| "@jupyterlab/testing": "^4.5.4", | ||
| "@jupyterlab/testing": "^4.5.5", | ||
| "@types/jest": "^29.2.0", | ||
@@ -65,0 +65,0 @@ "@types/ws": "^8.5.3", |
+131
-30
@@ -90,8 +90,15 @@ // Copyright (c) Jupyter Development Team. | ||
| set commsOverSubshells(value: CommsOverSubshells) { | ||
| if (value === this._commsOverSubshells) { | ||
| // Do nothing if the value is not changing. | ||
| return; | ||
| } | ||
| const closePromise = this._maybeCloseSubshell(this._commsOverSubshells); | ||
| this._commsOverSubshells = value; | ||
| if (this._commsOverSubshells === CommsOverSubshells.Disabled) { | ||
| this._maybeCloseSubshell(); | ||
| } else { | ||
| void this._maybeStartSubshell(); | ||
| } | ||
| closePromise | ||
| .then(() => { | ||
| if (this._commsOverSubshells !== CommsOverSubshells.Disabled) { | ||
| void this._maybeStartSubshell(); | ||
| } | ||
| }) | ||
| .catch(console.warn); | ||
| } | ||
@@ -271,3 +278,3 @@ | ||
| dispose(): void { | ||
| this._maybeCloseSubshell(); | ||
| void this._maybeCloseSubshell(this._commsOverSubshells); | ||
@@ -299,2 +306,3 @@ super.dispose(); | ||
| // One shell per comm-target | ||
| const subshellStarted = this._subshellStarted; | ||
| const kernelId = this._kernel.id; | ||
@@ -304,34 +312,104 @@ if (!CommHandler._commTargetSubShellsId.hasOwnProperty(kernelId)) { | ||
| } | ||
| const kernelCommTargetSubShells = | ||
| const kernelCommTargetSubshells = | ||
| CommHandler._commTargetSubShellsId[kernelId]; | ||
| if (kernelCommTargetSubShells[this._target]) { | ||
| this._subshellId = await kernelCommTargetSubShells[this._target]; | ||
| this._subshellStarted.resolve(); | ||
| } else { | ||
| // Create subshell | ||
| kernelCommTargetSubShells[this._target] = this._kernel | ||
| const existingEntry = kernelCommTargetSubshells[this._target]; | ||
| if (existingEntry) { | ||
| existingEntry.referenceCount += 1; | ||
| try { | ||
| this._subshellId = await existingEntry.subshellId; | ||
| subshellStarted.resolve(); | ||
| } catch (e) { | ||
| // If the future rejected we need to close the subshell to avoid leaks | ||
| await this._closePerCommTargetSubshell(false); | ||
| subshellStarted.reject( | ||
| `Per comm-target subshell creation failed: ${e}` | ||
| ); | ||
| } | ||
| return; | ||
| } | ||
| const entry: Private.ISubshellEntry = { | ||
| subshellId: this._kernel | ||
| .requestCreateSubshell({}) | ||
| .done.then(replyMsg => { | ||
| this._subshellId = replyMsg.content.subshell_id; | ||
| return this._subshellId; | ||
| }); | ||
| await kernelCommTargetSubShells[this._target]; | ||
| this._subshellStarted.resolve(); | ||
| .done.then(replyMsg => replyMsg.content.subshell_id), | ||
| referenceCount: 1 | ||
| }; | ||
| kernelCommTargetSubshells[this._target] = entry; | ||
| try { | ||
| this._subshellId = await entry.subshellId; | ||
| subshellStarted.resolve(); | ||
| } catch (e) { | ||
| // If the future rejected we need to close the subshell to avoid leaks | ||
| await this._closePerCommTargetSubshell(false); | ||
| subshellStarted.reject(`Per comm-target subshell creation failed: ${e}`); | ||
| } | ||
| } | ||
| private _maybeCloseSubshell() { | ||
| // Only close subshell if we have one subshell per comm | ||
| if (this._commsOverSubshells !== CommsOverSubshells.PerComm) { | ||
| private async _closePerCommTargetSubshell(shouldAskKernelToDelete = true) { | ||
| const kernelId = this._kernel.id; | ||
| const target = this._target; | ||
| if (CommHandler._commTargetSubShellsId.hasOwnProperty(kernelId)) { | ||
| // Close the subshell for this target if this is the last comm. | ||
| const kernelTargets = CommHandler._commTargetSubShellsId[kernelId]; | ||
| const entry = kernelTargets[target]; | ||
| if (entry) { | ||
| entry.referenceCount -= 1; | ||
| if (entry.referenceCount <= 0) { | ||
| if (shouldAskKernelToDelete) { | ||
| let subshellId: string | null = null; | ||
| try { | ||
| subshellId = await entry.subshellId; | ||
| } catch (e) { | ||
| console.warn( | ||
| `Subshell identifier not available in the closeout sequence, will not request deletion: ${e}` | ||
| ); | ||
| } | ||
| if (subshellId !== null) { | ||
| this._kernel.requestDeleteSubshell( | ||
| { subshell_id: subshellId }, | ||
| true | ||
| ); | ||
| } | ||
| } | ||
| delete kernelTargets[target]; | ||
| } | ||
| } | ||
| if (Object.keys(kernelTargets).length === 0) { | ||
| delete CommHandler._commTargetSubShellsId[kernelId]; | ||
| } | ||
| // Clear identifier | ||
| this._subshellId = null; | ||
| return; | ||
| } | ||
| // Restart promise delegate to subsequent startup | ||
| this._subshellStarted = new PromiseDelegate<void>(); | ||
| } | ||
| if (this._subshellId && this._kernel.status !== 'dead') { | ||
| this._kernel.requestDeleteSubshell( | ||
| { subshell_id: this._subshellId }, | ||
| true | ||
| ); | ||
| private async _maybeCloseSubshell(mode: CommsOverSubshells) { | ||
| if (this._kernel.status === 'dead') { | ||
| return; | ||
| } | ||
| this._subshellId = null; | ||
| switch (mode) { | ||
| case CommsOverSubshells.PerComm: { | ||
| if (this._subshellId) { | ||
| // Close the only subshell | ||
| this._kernel.requestDeleteSubshell( | ||
| { subshell_id: this._subshellId }, | ||
| true | ||
| ); | ||
| // Clear identifier | ||
| this._subshellId = null; | ||
| } | ||
| // Restart promise delegate to subsequent startup | ||
| this._subshellStarted = new PromiseDelegate<void>(); | ||
| break; | ||
| } | ||
| case CommsOverSubshells.PerCommTarget: { | ||
| await this._closePerCommTargetSubshell(); | ||
| break; | ||
| } | ||
| case CommsOverSubshells.Disabled: { | ||
| // no-op | ||
| break; | ||
| } | ||
| } | ||
| } | ||
@@ -342,3 +420,5 @@ | ||
| // One subshell per kernel per comm target. | ||
| [kernelId: string]: { [targetName: string]: Promise<string> | null }; | ||
| [kernelId: string]: { | ||
| [targetName: string]: Private.ISubshellEntry; | ||
| }; | ||
| } = {}; | ||
@@ -357,1 +437,22 @@ | ||
| } | ||
| /** | ||
| * Private interfaces of comm handler. | ||
| */ | ||
| namespace Private { | ||
| /** | ||
| * Describes an entry in the static tracker of subshells used in per-comm-target mode. | ||
| */ | ||
| export interface ISubshellEntry { | ||
| /** | ||
| * Promise which resolves with subshell identifier once it is known. | ||
| */ | ||
| subshellId: Promise<string>; | ||
| /** | ||
| * Keeps track of the number of references to the subshell. | ||
| * | ||
| * This is used to guard subshells shared across comm targets from premature disposal. | ||
| */ | ||
| referenceCount: number; | ||
| } | ||
| } |
Sorry, the diff of this file is too big to display
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 2 instances in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 2 instances in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
1406460
0.68%31553
0.56%96
1.05%