Skip to content

Commit e39529e

Browse files
committed
fix: reconnect WebPermissions system and upgrade deno dependencies
1 parent 53ffee3 commit e39529e

10 files changed

Lines changed: 1766 additions & 1612 deletions

File tree

Cargo.lock

Lines changed: 1317 additions & 1481 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,9 @@ async-trait = "^0.1.89"
169169
paste = "1.0.15"
170170

171171
# The deno runtime itself, and the webidl extension for the web APIs
172-
deno_core = "^0.376.0"
172+
deno_core = "^0.380.1"
173173
deno_error = "=0.7.1"
174-
deno_features = "^0.23.0"
174+
deno_features = "^0.25.0"
175175

176176
# For transpiling typescript
177177
deno_ast = { version = "^0.52.0", features = ["transpiling", "cjs"] }
@@ -189,7 +189,7 @@ rustls = {version = "0.23.28", optional = true}
189189
# Upgraded to support axum 0.8+
190190
reqwest = { version = "^0.12.20", optional = true, default-features = false, features = ["blocking", "rustls-tls"] }
191191
http = { version = "^1.0", optional = true }
192-
deno_permissions = { version = "^0.85.0", optional = true }
192+
deno_permissions = { version = "^0.87.0", optional = true }
193193

194194

195195
#
@@ -199,29 +199,29 @@ deno_permissions = { version = "^0.85.0", optional = true }
199199
deno_broadcast_channel = { version = "^0.216.0", optional = true }
200200
uuid = { version = "1.10.0", optional = true, features = ["v4"] }
201201

202-
deno_bundle_runtime = { version = "^0.13.0", optional = true }
203-
deno_cache = { version = "^0.159.0", optional = true }
202+
deno_bundle_runtime = { version = "^0.15.0", optional = true }
203+
deno_cache = { version = "^0.161.0", optional = true }
204204
deno_console = { version = "^0.222.0", optional = true }
205-
deno_cron = { version = "^0.106.0", optional = true }
206-
deno_crypto = { version = "^0.240.0", optional = true }
207-
deno_fetch = { version = "^0.250.0", optional = true }
208-
deno_ffi = { version = "^0.213.0", optional = true }
209-
deno_fs = { version = "^0.136.0", optional = true, features = ["sync_fs"] }
210-
deno_http = { version = "^0.224.0", optional = true }
211-
deno_kv = { version = "^0.134.0", optional = true }
212-
deno_net = { version = "^0.218.0", optional = true }
213-
deno_node = { version = "^0.164.0", optional = true }
214-
deno_tls = { version = "^0.213.0", optional = true }
205+
deno_cron = { version = "^0.108.0", optional = true }
206+
deno_crypto = { version = "^0.242.0", optional = true }
207+
deno_fetch = { version = "^0.252.0", optional = true }
208+
deno_ffi = { version = "^0.215.0", optional = true }
209+
deno_fs = { version = "^0.138.0", optional = true, features = ["sync_fs"] }
210+
deno_http = { version = "^0.226.0", optional = true }
211+
deno_kv = { version = "^0.136.0", optional = true }
212+
deno_net = { version = "^0.220.0", optional = true }
213+
deno_node = { version = "^0.166.0", optional = true }
214+
deno_tls = { version = "^0.215.0", optional = true }
215215
deno_url = { version = "^0.222.0", optional = true }
216216

217-
deno_web = { version = "^0.257.0", optional = true }
218-
deno_webidl = { version = "^0.226.0", optional = true }
219-
deno_webstorage = { version = "^0.221.0", optional = true }
220-
deno_websocket = { version = "^0.231.0", optional = true }
221-
deno_webgpu = { version = "^0.193.0", optional = true }
217+
deno_web = { version = "^0.259.0", optional = true }
218+
deno_webidl = { version = "^0.228.0", optional = true }
219+
deno_webstorage = { version = "^0.223.0", optional = true }
220+
deno_websocket = { version = "^0.233.0", optional = true }
221+
deno_webgpu = { version = "^0.195.0", optional = true }
222222

223-
deno_io = { version = "^0.136.0", optional = true }
224-
deno_telemetry = { version = "^0.48.0", optional = true }
223+
deno_io = { version = "^0.138.0", optional = true }
224+
deno_telemetry = { version = "^0.50.0", optional = true }
225225

226226
# Dependencies for the IO feature
227227
rustyline = {version = "=13.0.0", optional = true}
@@ -238,17 +238,17 @@ once_cell = {version = "^1.17.1", optional = true}
238238
base64-simd = {version = "0.8.0", optional = true}
239239

240240
# Dependencies for the node feature
241-
deno_resolver = { version = "^0.57.0", optional = true }
242-
node_resolver = { version = "^0.64.0", optional = true, features = ["sync"] }
243-
deno_runtime = { version = "^0.234.0", optional = true, features = ["exclude_runtime_main_js"] }
241+
deno_resolver = { version = "^0.59.0", optional = true }
242+
node_resolver = { version = "^0.66.0", optional = true, features = ["sync"] }
243+
deno_runtime = { version = "^0.236.0", optional = true, features = ["exclude_runtime_main_js"] }
244244
deno_terminal = { version = "^0.2.3", optional = true }
245245
deno_semver = { version = "^0.9.1", optional = true }
246-
deno_napi = { version = "^0.157.0", optional = true }
247-
deno_npm = { version = "^0.42.2", optional = true }
248-
deno_process = { version = "^0.41.0", optional = true }
249-
deno_package_json = { version = "^0.28.0", optional = true }
246+
deno_napi = { version = "^0.159.0", optional = true }
247+
deno_npm = { version = "^0.43.0", optional = true }
248+
deno_process = { version = "^0.43.0", optional = true }
249+
deno_package_json = { version = "^0.30.0", optional = true }
250250
checksum = { version = "0.2.1", optional = true }
251-
sys_traits = { version = "=0.1.17", optional = true, features = ["libc", "real", "winapi"] }
251+
sys_traits = { version = "=0.1.22", optional = true, features = ["libc", "real", "winapi"] }
252252

253253
[dev-dependencies]
254254
version-sync = "0.9.5"

examples/test_borrow_mut_error.rs

Lines changed: 0 additions & 93 deletions
This file was deleted.

src/ext/runtime/mod.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,24 @@ use deno_telemetry::OtelConfig;
1212
use sys_traits::impls::RealSys;
1313

1414
use super::{
15-
node::resolvers::RustyResolver, web::PermissionsContainer, ExtensionOptions, ExtensionTrait,
15+
node::resolvers::RustyResolver, web::PermissionsContainer, web::to_permissions_options,
16+
ExtensionOptions, ExtensionTrait,
1617
};
1718
use crate::module_loader::{LoaderOptions, RustyLoader};
1819

1920
fn build_permissions(
2021
permissions_container: &PermissionsContainer,
2122
) -> ::deno_permissions::PermissionsContainer {
2223
let parser = Arc::new(RuntimePermissionDescriptorParser::<RealSys>::new(RealSys));
23-
::deno_permissions::PermissionsContainer::new(parser, Permissions::allow_all())
24+
let opts = to_permissions_options(permissions_container.0.as_ref());
25+
26+
match Permissions::from_options(&*parser, &opts) {
27+
Ok(perms) => ::deno_permissions::PermissionsContainer::new(parser, perms),
28+
Err(_) => {
29+
// Fallback for backward compatibility
30+
::deno_permissions::PermissionsContainer::new(parser, Permissions::allow_all())
31+
}
32+
}
2433
}
2534

2635
// Some of the polyfills reference the denoland/deno runtime directly

src/ext/web/mod.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ mod permissions;
1111
pub(crate) use permissions::PermissionsContainer;
1212
pub use permissions::{
1313
AllowlistWebPermissions, CheckedPath, DefaultWebPermissions, PermissionCheckError,
14-
PermissionDeniedError, SystemsPermissionKind, WebPermissions,
14+
PermissionDeniedError, PermissionsOptions, SystemsPermissionKind, WebPermissions,
15+
to_permissions_options,
1516
};
1617

1718
/// Stub for a node op deno_net expects to find
@@ -114,10 +115,14 @@ extension!(
114115
permissions: Arc<dyn WebPermissions>
115116
},
116117
state = |state, config| {
117-
state.put(PermissionsContainer(config.permissions));
118+
state.put(PermissionsContainer(config.permissions.clone()));
118119
if !state.has::<deno_permissions::PermissionsContainer>() {
119120
let parser = Arc::new(deno_permissions::RuntimePermissionDescriptorParser::new(sys_traits::impls::RealSys));
120-
let permissions = deno_permissions::PermissionsContainer::allow_all(parser);
121+
let opts = permissions::to_permissions_options(config.permissions.as_ref());
122+
let permissions = match deno_permissions::Permissions::from_options(&*parser, &opts) {
123+
Ok(p) => deno_permissions::PermissionsContainer::new(parser, p),
124+
Err(_) => deno_permissions::PermissionsContainer::allow_all(parser),
125+
};
121126
state.put(permissions);
122127
}
123128
},

src/ext/web/permissions.rs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::{
77

88
pub use deno_permissions::{
99
CheckedPath, PermissionCheckError, PermissionDeniedError, PermissionState,
10+
PermissionsOptions,
1011
};
1112

1213
pub fn oops(msg: impl std::fmt::Display) -> PermissionCheckError {
@@ -639,3 +640,70 @@ impl_sys_permission_kinds!(
639640
#[allow(dead_code)]
640641
#[derive(Clone, Debug)]
641642
pub struct PermissionsContainer(pub Arc<dyn WebPermissions>);
643+
644+
/// Convert WebPermissions to deno_permissions::PermissionsOptions
645+
///
646+
/// This function probes the WebPermissions trait methods to determine
647+
/// what should be allowed, then converts to PermissionsOptions format.
648+
///
649+
/// - For `DefaultWebPermissions` (or equivalent allow-all): returns options that allow everything
650+
/// - For restrictive permissions (e.g., `AllowlistWebPermissions`): returns options that deny by default
651+
pub fn to_permissions_options(perms: &dyn WebPermissions) -> PermissionsOptions {
652+
// Probe to detect if this is an allow-all implementation
653+
// We test multiple permission categories to be thorough
654+
let is_allow_all = perms.allow_hrtime()
655+
&& perms.check_read_all(None).is_ok()
656+
&& perms.check_write_all("probe").is_ok()
657+
&& perms.check_host("0.0.0.0", Some(0), "probe").is_ok()
658+
&& perms.check_env("__PROBE__").is_ok()
659+
&& perms.check_exec().is_ok();
660+
661+
if is_allow_all {
662+
// DefaultWebPermissions or equivalent - allow everything
663+
PermissionsOptions {
664+
allow_read: Some(vec![]),
665+
deny_read: None,
666+
ignore_read: None,
667+
allow_write: Some(vec![]),
668+
deny_write: None,
669+
allow_net: Some(vec![]),
670+
deny_net: None,
671+
allow_env: Some(vec![]),
672+
deny_env: None,
673+
ignore_env: None,
674+
allow_sys: Some(vec![]),
675+
deny_sys: None,
676+
allow_ffi: Some(vec![]),
677+
deny_ffi: None,
678+
allow_run: Some(vec![]),
679+
deny_run: None,
680+
allow_import: Some(vec![]),
681+
deny_import: None,
682+
prompt: false,
683+
}
684+
} else {
685+
// Restrictive permissions - deny everything by default
686+
// The deno extensions will check permissions and deny operations
687+
PermissionsOptions {
688+
allow_read: None,
689+
deny_read: None,
690+
ignore_read: None,
691+
allow_write: None,
692+
deny_write: None,
693+
allow_net: None,
694+
deny_net: None,
695+
allow_env: None,
696+
deny_env: None,
697+
ignore_env: None,
698+
allow_sys: None,
699+
deny_sys: None,
700+
allow_ffi: None,
701+
deny_ffi: None,
702+
allow_run: None,
703+
deny_run: None,
704+
allow_import: Some(vec![]), // Allow imports by default for module loading
705+
deny_import: None,
706+
prompt: false,
707+
}
708+
}
709+
}

src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,8 @@ pub use ext::node::resolvers::RustyResolver;
407407
#[cfg_attr(docsrs, doc(cfg(feature = "web")))]
408408
pub use ext::web::{
409409
AllowlistWebPermissions, CheckedPath, DefaultWebPermissions, PermissionCheckError,
410-
PermissionDeniedError, SystemsPermissionKind, WebOptions, WebPermissions,
410+
PermissionDeniedError, PermissionsOptions, SystemsPermissionKind, WebOptions, WebPermissions,
411+
to_permissions_options,
411412
};
412413
pub use ext::ExtensionOptions;
413414

src/utilities.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ mod runtime_macros {
149149
/// rustyscript.register_entrypoint(load);
150150
/// ");
151151
///
152-
/// Runtime::execute_module(
152+
/// Runtime::execute_module::<()>(
153153
/// &module, vec![],
154154
/// Default::default(),
155155
/// json_args!("test", 5)
@@ -186,7 +186,7 @@ mod runtime_macros {
186186
/// rustyscript.register_entrypoint(load);
187187
/// ");
188188
///
189-
/// Runtime::execute_module(
189+
/// Runtime::execute_module::<()>(
190190
/// &module, vec![],
191191
/// Default::default(),
192192
/// big_json_args!("test", 5)

0 commit comments

Comments
 (0)