mirror of
https://github.com/nodejs/node.git
synced 2024-11-25 08:19:38 +01:00
cli: remove --no-experimental-global-webcrypto flag
PR-URL: https://github.com/nodejs/node/pull/52564 Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io> Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
This commit is contained in:
parent
d3eb1cb385
commit
a30ae50860
@ -1388,14 +1388,6 @@ added: v21.2.0
|
|||||||
|
|
||||||
Disable exposition of [Navigator API][] on the global scope.
|
Disable exposition of [Navigator API][] on the global scope.
|
||||||
|
|
||||||
### `--no-experimental-global-webcrypto`
|
|
||||||
|
|
||||||
<!-- YAML
|
|
||||||
added: v19.0.0
|
|
||||||
-->
|
|
||||||
|
|
||||||
Disable exposition of [Web Crypto API][] on the global scope.
|
|
||||||
|
|
||||||
### `--no-experimental-repl-await`
|
### `--no-experimental-repl-await`
|
||||||
|
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
@ -2699,7 +2691,6 @@ one is included in the list below.
|
|||||||
* `--no-experimental-fetch`
|
* `--no-experimental-fetch`
|
||||||
* `--no-experimental-global-customevent`
|
* `--no-experimental-global-customevent`
|
||||||
* `--no-experimental-global-navigator`
|
* `--no-experimental-global-navigator`
|
||||||
* `--no-experimental-global-webcrypto`
|
|
||||||
* `--no-experimental-repl-await`
|
* `--no-experimental-repl-await`
|
||||||
* `--no-experimental-websocket`
|
* `--no-experimental-websocket`
|
||||||
* `--no-extra-info-on-fatal-exception`
|
* `--no-extra-info-on-fatal-exception`
|
||||||
@ -3190,7 +3181,6 @@ node --stack-trace-limit=12 -p -e "Error.stackTraceLimit" # prints 12
|
|||||||
[Subresource Integrity]: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity
|
[Subresource Integrity]: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity
|
||||||
[V8 JavaScript code coverage]: https://v8project.blogspot.com/2017/12/javascript-code-coverage.html
|
[V8 JavaScript code coverage]: https://v8project.blogspot.com/2017/12/javascript-code-coverage.html
|
||||||
[V8 code cache]: https://v8.dev/blog/code-caching-for-devs
|
[V8 code cache]: https://v8.dev/blog/code-caching-for-devs
|
||||||
[Web Crypto API]: webcrypto.md
|
|
||||||
[`"type"`]: packages.md#type
|
[`"type"`]: packages.md#type
|
||||||
[`--allow-child-process`]: #--allow-child-process
|
[`--allow-child-process`]: #--allow-child-process
|
||||||
[`--allow-fs-read`]: #--allow-fs-read
|
[`--allow-fs-read`]: #--allow-fs-read
|
||||||
|
@ -361,13 +361,15 @@ added:
|
|||||||
- v17.6.0
|
- v17.6.0
|
||||||
- v16.15.0
|
- v16.15.0
|
||||||
changes:
|
changes:
|
||||||
|
- version: REPLACEME
|
||||||
|
pr-url: https://github.com/nodejs/node/pull/52564
|
||||||
|
description: No longer experimental.
|
||||||
- version: v19.0.0
|
- version: v19.0.0
|
||||||
pr-url: https://github.com/nodejs/node/pull/42083
|
pr-url: https://github.com/nodejs/node/pull/42083
|
||||||
description: No longer behind `--experimental-global-webcrypto` CLI flag.
|
description: No longer behind `--experimental-global-webcrypto` CLI flag.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
> Stability: 1 - Experimental. Disable this API with the
|
> Stability: 2 - Stable.
|
||||||
> [`--no-experimental-global-webcrypto`][] CLI flag.
|
|
||||||
|
|
||||||
A browser-compatible implementation of {Crypto}. This global is available
|
A browser-compatible implementation of {Crypto}. This global is available
|
||||||
only if the Node.js binary was compiled with including support for the
|
only if the Node.js binary was compiled with including support for the
|
||||||
@ -380,13 +382,15 @@ added:
|
|||||||
- v17.6.0
|
- v17.6.0
|
||||||
- v16.15.0
|
- v16.15.0
|
||||||
changes:
|
changes:
|
||||||
|
- version: REPLACEME
|
||||||
|
pr-url: https://github.com/nodejs/node/pull/52564
|
||||||
|
description: No longer experimental.
|
||||||
- version: v19.0.0
|
- version: v19.0.0
|
||||||
pr-url: https://github.com/nodejs/node/pull/42083
|
pr-url: https://github.com/nodejs/node/pull/42083
|
||||||
description: No longer behind `--experimental-global-webcrypto` CLI flag.
|
description: No longer behind `--experimental-global-webcrypto` CLI flag.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
> Stability: 1 - Experimental. Disable this API with the
|
> Stability: 2 - Stable.
|
||||||
> [`--no-experimental-global-webcrypto`][] CLI flag.
|
|
||||||
|
|
||||||
A browser-compatible implementation of the [Web Crypto API][].
|
A browser-compatible implementation of the [Web Crypto API][].
|
||||||
|
|
||||||
@ -397,13 +401,15 @@ added:
|
|||||||
- v17.6.0
|
- v17.6.0
|
||||||
- v16.15.0
|
- v16.15.0
|
||||||
changes:
|
changes:
|
||||||
|
- version: REPLACEME
|
||||||
|
pr-url: https://github.com/nodejs/node/pull/52564
|
||||||
|
description: No longer experimental.
|
||||||
- version: v19.0.0
|
- version: v19.0.0
|
||||||
pr-url: https://github.com/nodejs/node/pull/42083
|
pr-url: https://github.com/nodejs/node/pull/42083
|
||||||
description: No longer behind `--experimental-global-webcrypto` CLI flag.
|
description: No longer behind `--experimental-global-webcrypto` CLI flag.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
> Stability: 1 - Experimental. Disable this API with the
|
> Stability: 2 - Stable.
|
||||||
> [`--no-experimental-global-webcrypto`][] CLI flag.
|
|
||||||
|
|
||||||
A browser-compatible implementation of {CryptoKey}. This global is available
|
A browser-compatible implementation of {CryptoKey}. This global is available
|
||||||
only if the Node.js binary was compiled with including support for the
|
only if the Node.js binary was compiled with including support for the
|
||||||
@ -981,8 +987,7 @@ changes:
|
|||||||
description: No longer behind `--experimental-global-webcrypto` CLI flag.
|
description: No longer behind `--experimental-global-webcrypto` CLI flag.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
> Stability: 1 - Experimental. Disable this API with the
|
> Stability: 2 - Stable.
|
||||||
> [`--no-experimental-global-webcrypto`][] CLI flag.
|
|
||||||
|
|
||||||
A browser-compatible implementation of {SubtleCrypto}. This global is available
|
A browser-compatible implementation of {SubtleCrypto}. This global is available
|
||||||
only if the Node.js binary was compiled with including support for the
|
only if the Node.js binary was compiled with including support for the
|
||||||
@ -1147,7 +1152,6 @@ A browser-compatible implementation of [`WritableStreamDefaultWriter`][].
|
|||||||
[Web Crypto API]: webcrypto.md
|
[Web Crypto API]: webcrypto.md
|
||||||
[`--no-experimental-global-customevent`]: cli.md#--no-experimental-global-customevent
|
[`--no-experimental-global-customevent`]: cli.md#--no-experimental-global-customevent
|
||||||
[`--no-experimental-global-navigator`]: cli.md#--no-experimental-global-navigator
|
[`--no-experimental-global-navigator`]: cli.md#--no-experimental-global-navigator
|
||||||
[`--no-experimental-global-webcrypto`]: cli.md#--no-experimental-global-webcrypto
|
|
||||||
[`--no-experimental-websocket`]: cli.md#--no-experimental-websocket
|
[`--no-experimental-websocket`]: cli.md#--no-experimental-websocket
|
||||||
[`AbortController`]: https://developer.mozilla.org/en-US/docs/Web/API/AbortController
|
[`AbortController`]: https://developer.mozilla.org/en-US/docs/Web/API/AbortController
|
||||||
[`ByteLengthQueuingStrategy`]: webstreams.md#class-bytelengthqueuingstrategy
|
[`ByteLengthQueuingStrategy`]: webstreams.md#class-bytelengthqueuingstrategy
|
||||||
|
@ -192,9 +192,6 @@ Disable experimental support for the WebSocket API.
|
|||||||
.It Fl -no-experimental-global-customevent
|
.It Fl -no-experimental-global-customevent
|
||||||
Disable exposition of the CustomEvent on the global scope.
|
Disable exposition of the CustomEvent on the global scope.
|
||||||
.
|
.
|
||||||
.It Fl -no-experimental-global-webcrypto
|
|
||||||
Disable exposition of the Web Crypto API on the global scope.
|
|
||||||
.
|
|
||||||
.It Fl -no-experimental-repl-await
|
.It Fl -no-experimental-repl-await
|
||||||
Disable top-level await keyword support in REPL.
|
Disable top-level await keyword support in REPL.
|
||||||
.
|
.
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
const {
|
const {
|
||||||
globalThis,
|
globalThis,
|
||||||
ObjectDefineProperty,
|
ObjectDefineProperty,
|
||||||
|
ObjectGetOwnPropertyDescriptor,
|
||||||
} = primordials;
|
} = primordials;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@ -20,6 +21,11 @@ const {
|
|||||||
exposeLazyInterfaces,
|
exposeLazyInterfaces,
|
||||||
} = require('internal/util');
|
} = require('internal/util');
|
||||||
|
|
||||||
|
const {
|
||||||
|
ERR_INVALID_THIS,
|
||||||
|
ERR_NO_CRYPTO,
|
||||||
|
} = require('internal/errors').codes;
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope
|
// https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope
|
||||||
const timers = require('timers');
|
const timers = require('timers');
|
||||||
defineOperation(globalThis, 'clearInterval', timers.clearInterval);
|
defineOperation(globalThis, 'clearInterval', timers.clearInterval);
|
||||||
@ -89,3 +95,29 @@ exposeLazyInterfaces(globalThis, 'internal/deps/undici/undici', ['WebSocket']);
|
|||||||
internalBinding('wasm_web_api').setImplementation((streamState, source) => {
|
internalBinding('wasm_web_api').setImplementation((streamState, source) => {
|
||||||
require('internal/wasm_web_api').wasmStreamingCallback(streamState, source);
|
require('internal/wasm_web_api').wasmStreamingCallback(streamState, source);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// WebCryptoAPI
|
||||||
|
if (internalBinding('config').hasOpenSSL) {
|
||||||
|
defineReplaceableLazyAttribute(
|
||||||
|
globalThis,
|
||||||
|
'internal/crypto/webcrypto',
|
||||||
|
['crypto'],
|
||||||
|
false,
|
||||||
|
function cryptoThisCheck() {
|
||||||
|
if (this !== globalThis && this != null)
|
||||||
|
throw new ERR_INVALID_THIS(
|
||||||
|
'nullish or must be the global object');
|
||||||
|
},
|
||||||
|
);
|
||||||
|
exposeLazyInterfaces(
|
||||||
|
globalThis, 'internal/crypto/webcrypto',
|
||||||
|
['Crypto', 'CryptoKey', 'SubtleCrypto'],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
ObjectDefineProperty(globalThis, 'crypto',
|
||||||
|
{ __proto__: null, ...ObjectGetOwnPropertyDescriptor({
|
||||||
|
get crypto() {
|
||||||
|
throw new ERR_NO_CRYPTO();
|
||||||
|
},
|
||||||
|
}, 'crypto') });
|
||||||
|
}
|
||||||
|
@ -5,7 +5,6 @@ const {
|
|||||||
JSONParse,
|
JSONParse,
|
||||||
JSONStringify,
|
JSONStringify,
|
||||||
ObjectDefineProperties,
|
ObjectDefineProperties,
|
||||||
ObjectDefineProperty,
|
|
||||||
ReflectApply,
|
ReflectApply,
|
||||||
ReflectConstruct,
|
ReflectConstruct,
|
||||||
SafeSet,
|
SafeSet,
|
||||||
@ -21,10 +20,6 @@ const {
|
|||||||
kWebCryptoCipherDecrypt,
|
kWebCryptoCipherDecrypt,
|
||||||
} = internalBinding('crypto');
|
} = internalBinding('crypto');
|
||||||
|
|
||||||
const {
|
|
||||||
getOptionValue,
|
|
||||||
} = require('internal/options');
|
|
||||||
|
|
||||||
const { TextDecoder, TextEncoder } = require('internal/encoding');
|
const { TextDecoder, TextEncoder } = require('internal/encoding');
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@ -1025,18 +1020,6 @@ ObjectDefineProperties(
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (getOptionValue('--no-experimental-global-webcrypto')) {
|
|
||||||
// For backward compatibility, keep exposing CryptoKey in the Crypto prototype
|
|
||||||
// when using the flag.
|
|
||||||
ObjectDefineProperty(Crypto.prototype, 'CryptoKey', {
|
|
||||||
__proto__: null,
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
writable: true,
|
|
||||||
value: CryptoKey,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
ObjectDefineProperties(
|
ObjectDefineProperties(
|
||||||
SubtleCrypto.prototype, {
|
SubtleCrypto.prototype, {
|
||||||
[SymbolToStringTag]: {
|
[SymbolToStringTag]: {
|
||||||
|
@ -31,9 +31,7 @@ if (getOptionValue('--input-type') === 'module' ||
|
|||||||
} else {
|
} else {
|
||||||
// For backward compatibility, we want the identifier crypto to be the
|
// For backward compatibility, we want the identifier crypto to be the
|
||||||
// `node:crypto` module rather than WebCrypto.
|
// `node:crypto` module rather than WebCrypto.
|
||||||
const isUsingCryptoIdentifier =
|
const isUsingCryptoIdentifier = RegExpPrototypeExec(/\bcrypto\b/, source) !== null;
|
||||||
getOptionValue('--experimental-global-webcrypto') &&
|
|
||||||
RegExpPrototypeExec(/\bcrypto\b/, source) !== null;
|
|
||||||
const shouldDefineCrypto = isUsingCryptoIdentifier && internalBinding('config').hasOpenSSL;
|
const shouldDefineCrypto = isUsingCryptoIdentifier && internalBinding('config').hasOpenSSL;
|
||||||
|
|
||||||
if (isUsingCryptoIdentifier && !shouldDefineCrypto) {
|
if (isUsingCryptoIdentifier && !shouldDefineCrypto) {
|
||||||
|
@ -12,7 +12,6 @@ const {
|
|||||||
NumberParseInt,
|
NumberParseInt,
|
||||||
ObjectDefineProperty,
|
ObjectDefineProperty,
|
||||||
ObjectFreeze,
|
ObjectFreeze,
|
||||||
ObjectGetOwnPropertyDescriptor,
|
|
||||||
SafeMap,
|
SafeMap,
|
||||||
String,
|
String,
|
||||||
StringPrototypeStartsWith,
|
StringPrototypeStartsWith,
|
||||||
@ -36,9 +35,7 @@ const {
|
|||||||
} = require('internal/util');
|
} = require('internal/util');
|
||||||
|
|
||||||
const {
|
const {
|
||||||
ERR_INVALID_THIS,
|
|
||||||
ERR_MANIFEST_ASSERT_INTEGRITY,
|
ERR_MANIFEST_ASSERT_INTEGRITY,
|
||||||
ERR_NO_CRYPTO,
|
|
||||||
ERR_MISSING_OPTION,
|
ERR_MISSING_OPTION,
|
||||||
ERR_ACCESS_DENIED,
|
ERR_ACCESS_DENIED,
|
||||||
} = require('internal/errors').codes;
|
} = require('internal/errors').codes;
|
||||||
@ -107,7 +104,6 @@ function prepareExecution(options) {
|
|||||||
setupNavigator();
|
setupNavigator();
|
||||||
setupWarningHandler();
|
setupWarningHandler();
|
||||||
setupUndici();
|
setupUndici();
|
||||||
setupWebCrypto();
|
|
||||||
setupCustomEvent();
|
setupCustomEvent();
|
||||||
setupCodeCoverage();
|
setupCodeCoverage();
|
||||||
setupDebugEnv();
|
setupDebugEnv();
|
||||||
@ -341,41 +337,6 @@ function setupNavigator() {
|
|||||||
defineReplaceableLazyAttribute(globalThis, 'internal/navigator', ['navigator'], false);
|
defineReplaceableLazyAttribute(globalThis, 'internal/navigator', ['navigator'], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(aduh95): move this to internal/bootstrap/web/* when the CLI flag is
|
|
||||||
// removed.
|
|
||||||
function setupWebCrypto() {
|
|
||||||
if (getEmbedderOptions().noBrowserGlobals ||
|
|
||||||
getOptionValue('--no-experimental-global-webcrypto')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (internalBinding('config').hasOpenSSL) {
|
|
||||||
defineReplaceableLazyAttribute(
|
|
||||||
globalThis,
|
|
||||||
'internal/crypto/webcrypto',
|
|
||||||
['crypto'],
|
|
||||||
false,
|
|
||||||
function cryptoThisCheck() {
|
|
||||||
if (this !== globalThis && this != null)
|
|
||||||
throw new ERR_INVALID_THIS(
|
|
||||||
'nullish or must be the global object');
|
|
||||||
},
|
|
||||||
);
|
|
||||||
exposeLazyInterfaces(
|
|
||||||
globalThis, 'internal/crypto/webcrypto',
|
|
||||||
['Crypto', 'CryptoKey', 'SubtleCrypto'],
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
ObjectDefineProperty(globalThis, 'crypto',
|
|
||||||
{ __proto__: null, ...ObjectGetOwnPropertyDescriptor({
|
|
||||||
get crypto() {
|
|
||||||
throw new ERR_NO_CRYPTO();
|
|
||||||
},
|
|
||||||
}, 'crypto') });
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setupCodeCoverage() {
|
function setupCodeCoverage() {
|
||||||
// Resolve the coverage directory to an absolute path, and
|
// Resolve the coverage directory to an absolute path, and
|
||||||
// overwrite process.env so that the original path gets passed
|
// overwrite process.env so that the original path gets passed
|
||||||
|
@ -416,11 +416,7 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() {
|
|||||||
&EnvironmentOptions::experimental_global_navigator,
|
&EnvironmentOptions::experimental_global_navigator,
|
||||||
kAllowedInEnvvar,
|
kAllowedInEnvvar,
|
||||||
true);
|
true);
|
||||||
AddOption("--experimental-global-webcrypto",
|
AddOption("--experimental-global-webcrypto", "", NoOp{}, kAllowedInEnvvar);
|
||||||
"expose experimental Web Crypto API on the global scope",
|
|
||||||
&EnvironmentOptions::experimental_global_web_crypto,
|
|
||||||
kAllowedInEnvvar,
|
|
||||||
true);
|
|
||||||
AddOption("--experimental-json-modules", "", NoOp{}, kAllowedInEnvvar);
|
AddOption("--experimental-json-modules", "", NoOp{}, kAllowedInEnvvar);
|
||||||
AddOption("--experimental-loader",
|
AddOption("--experimental-loader",
|
||||||
"use the specified module as a custom loader",
|
"use the specified module as a custom loader",
|
||||||
|
@ -348,12 +348,6 @@ child.exec(
|
|||||||
common.mustSucceed((stdout) => {
|
common.mustSucceed((stdout) => {
|
||||||
assert.match(stdout, /^number/);
|
assert.match(stdout, /^number/);
|
||||||
}));
|
}));
|
||||||
child.exec(
|
|
||||||
`${nodejs} --no-experimental-global-webcrypto ` +
|
|
||||||
'-p "var crypto = {randomBytes:1};typeof crypto.randomBytes"',
|
|
||||||
common.mustSucceed((stdout) => {
|
|
||||||
assert.match(stdout, /^number/);
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Regression test for https://github.com/nodejs/node/issues/45336
|
// Regression test for https://github.com/nodejs/node/issues/45336
|
||||||
child.execFile(process.execPath,
|
child.execFile(process.execPath,
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
// Flags: --no-experimental-global-webcrypto
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
require('../common');
|
|
||||||
const assert = require('assert');
|
|
||||||
|
|
||||||
assert.strictEqual(typeof crypto, 'undefined');
|
|
||||||
assert.strictEqual(typeof Crypto, 'undefined');
|
|
||||||
assert.strictEqual(typeof CryptoKey, 'undefined');
|
|
||||||
assert.strictEqual(typeof SubtleCrypto, 'undefined');
|
|
@ -99,6 +99,7 @@ const undocumented = difference(process.allowedNodeEnvironmentFlags,
|
|||||||
assert(undocumented.delete('--debug-arraybuffer-allocations'));
|
assert(undocumented.delete('--debug-arraybuffer-allocations'));
|
||||||
assert(undocumented.delete('--no-debug-arraybuffer-allocations'));
|
assert(undocumented.delete('--no-debug-arraybuffer-allocations'));
|
||||||
assert(undocumented.delete('--es-module-specifier-resolution'));
|
assert(undocumented.delete('--es-module-specifier-resolution'));
|
||||||
|
assert(undocumented.delete('--experimental-global-webcrypto'));
|
||||||
assert(undocumented.delete('--experimental-report'));
|
assert(undocumented.delete('--experimental-report'));
|
||||||
assert(undocumented.delete('--experimental-worker'));
|
assert(undocumented.delete('--experimental-worker'));
|
||||||
assert(undocumented.delete('--node-snapshot'));
|
assert(undocumented.delete('--node-snapshot'));
|
||||||
|
Loading…
Reference in New Issue
Block a user