Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions samples/tcp/config.capnp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const gopherWorker :Workerd.Worker = (
(name = "worker", esModule = embed "gopher.js")
],
compatibilityDate = "2022-09-26",
compatibilityFlags = ["tcp_sockets_support"],
# In order to access our configured proxy we need to specify it as a binding. This will allow
# it to be accessible via `env.proxy` in the JS script.
bindings = [
Expand Down
5 changes: 3 additions & 2 deletions src/workerd/api/global-scope.c++
Original file line number Diff line number Diff line change
Expand Up @@ -571,8 +571,9 @@ jsg::Promise<jsg::Ref<Response>> ServiceWorkerGlobalScope::fetch(
}

jsg::Ref<Socket> ServiceWorkerGlobalScope::connect(
jsg::Lock& js, kj::String address, jsg::Optional<SocketOptions> options) {
return connectImpl(js, nullptr, kj::mv(address));
jsg::Lock& js, kj::String address, jsg::Optional<SocketOptions> options,
CompatibilityFlags::Reader featureFlags) {
return connectImpl(js, nullptr, kj::mv(address), featureFlags);
}

} // namespace workerd::api
3 changes: 2 additions & 1 deletion src/workerd/api/global-scope.h
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,8 @@ class ServiceWorkerGlobalScope: public WorkerGlobalScope {
CompatibilityFlags::Reader featureFlags);

jsg::Ref<Socket> connect(
jsg::Lock& js, kj::String address, jsg::Optional<SocketOptions> options);
jsg::Lock& js, kj::String address, jsg::Optional<SocketOptions> options,
CompatibilityFlags::Reader featureFlags);

jsg::Ref<ServiceWorkerGlobalScope> getSelf() {
return JSG_THIS;
Expand Down
5 changes: 3 additions & 2 deletions src/workerd/api/http.c++
Original file line number Diff line number Diff line change
Expand Up @@ -1808,8 +1808,9 @@ jsg::Promise<jsg::Ref<Response>> fetchImpl(
}

jsg::Ref<Socket> Fetcher::connect(
jsg::Lock& js, kj::String address, jsg::Optional<SocketOptions> options) {
return connectImpl(js, JSG_THIS, kj::mv(address));
jsg::Lock& js, kj::String address, jsg::Optional<SocketOptions> options,
CompatibilityFlags::Reader featureFlags) {
return connectImpl(js, JSG_THIS, kj::mv(address), featureFlags);
}

jsg::Promise<jsg::Ref<Response>> Fetcher::fetch(
Expand Down
3 changes: 2 additions & 1 deletion src/workerd/api/http.h
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,8 @@ class Fetcher: public jsg::Object {
// specified on URLs, Fetcher-specific URL decoding options, and error handling.

jsg::Ref<Socket> connect(
jsg::Lock& js, kj::String address, jsg::Optional<SocketOptions> options);
jsg::Lock& js, kj::String address, jsg::Optional<SocketOptions> options,
CompatibilityFlags::Reader featureFlags);

jsg::Promise<jsg::Ref<Response>> fetch(
jsg::Lock& js, kj::OneOf<jsg::Ref<Request>, kj::String> requestOrUrl,
Expand Down
6 changes: 5 additions & 1 deletion src/workerd/api/sockets.c++
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,11 @@ jsg::Ref<Socket> connectImplNoOutputLock(
}

jsg::Ref<Socket> connectImpl(
jsg::Lock& js, kj::Maybe<jsg::Ref<Fetcher>> fetcher, kj::String address) {
jsg::Lock& js, kj::Maybe<jsg::Ref<Fetcher>> fetcher, kj::String address,
CompatibilityFlags::Reader featureFlags) {
if (!featureFlags.getTcpSocketsSupport()) {
JSG_FAIL_REQUIRE(TypeError, "TCP Sockets API not enabled.");
}
jsg::Ref<Fetcher> actualFetcher = nullptr;
KJ_IF_MAYBE(f, fetcher) {
actualFetcher = kj::mv(*f);
Expand Down
3 changes: 2 additions & 1 deletion src/workerd/api/sockets.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ jsg::Ref<Socket> connectImplNoOutputLock(
jsg::Lock& js, jsg::Ref<Fetcher> fetcher, kj::String address);

jsg::Ref<Socket> connectImpl(
jsg::Lock& js, kj::Maybe<jsg::Ref<Fetcher>> fetcher, kj::String address);
jsg::Lock& js, kj::Maybe<jsg::Ref<Fetcher>> fetcher, kj::String address,
CompatibilityFlags::Reader featureFlags);

#define EW_SOCKETS_ISOLATE_TYPES \
api::Socket, \
Expand Down
8 changes: 7 additions & 1 deletion src/workerd/io/compatibility-date.capnp
Original file line number Diff line number Diff line change
Expand Up @@ -227,9 +227,15 @@ struct CompatibilityFlags @0x8f8c1b68151b6cef {
# request that no compression be used.

nodeJs18CompatExperimental @21 :Bool
$compatEnableFlag("nodejs_18_compat_experimental");
$compatEnableFlag("nodejs_18_compat_experimental");
# Experimental, do not use.
# Enables nodejs 18 compat imports in the application.
# This is currently a work in progress mechanism that is not yet available for use in workerd.
# WARNING: IT WILL BREAK in the future. Do not ignore this warning.

tcpSocketsSupport @22 :Bool
$compatEnableFlag("tcp_sockets_support");
# Enables TCP sockets in workerd.
# These are still under development and therefore subject to change.
# WARNING: DO NOT depend on this feature as its API is still subject to change.
}