From f3bb0a1a0e5ee3335d3c45db2be285791c7516cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sun, 14 Jan 2024 18:06:26 +0100 Subject: [PATCH] feat: stabilize Deno.connectTls options and Deno.TlsConn.handshake (#21889) --- cli/tsc/dts/lib.deno.unstable.d.ts | 64 ------------------------------ ext/net/lib.deno_net.d.ts | 13 +++++- ext/net/ops_tls.rs | 7 ---- 3 files changed, 11 insertions(+), 73 deletions(-) diff --git a/cli/tsc/dts/lib.deno.unstable.d.ts b/cli/tsc/dts/lib.deno.unstable.d.ts index 8962acf1af0379..dd86d709a7b38d 100644 --- a/cli/tsc/dts/lib.deno.unstable.d.ts +++ b/cli/tsc/dts/lib.deno.unstable.d.ts @@ -1173,70 +1173,6 @@ declare namespace Deno { */ export function connect(options: UnixConnectOptions): Promise; - /** **UNSTABLE**: New API, yet to be vetted. - * - * @category Network - */ - export interface ConnectTlsOptions { - /** **UNSTABLE**: New API, yet to be vetted. - * - * PEM formatted client certificate chain. - */ - certChain?: string; - /** **UNSTABLE**: New API, yet to be vetted. - * - * PEM formatted (RSA or PKCS8) private key of client certificate. - */ - privateKey?: string; - } - - /** **UNSTABLE**: New API, yet to be vetted. - * - * @category Network - */ - export interface TlsHandshakeInfo { - /** **UNSTABLE**: New API, yet to be vetted. - * - * Contains the ALPN protocol selected during negotiation with the server. - * If no ALPN protocol selected, returns `null`. - */ - alpnProtocol: string | null; - } - - /** **UNSTABLE**: New API, yet to be vetted. - * - * @category Network - */ - export interface TlsConn extends Conn { - /** **UNSTABLE**: New API, yet to be vetted. - * - * Runs the client or server handshake protocol to completion if that has - * not happened yet. Calling this method is optional; the TLS handshake - * will be completed automatically as soon as data is sent or received. - */ - handshake(): Promise; - } - - /** **UNSTABLE**: New API, yet to be vetted. - * - * Create a TLS connection with an attached client certificate. - * - * ```ts - * const conn = await Deno.connectTls({ - * hostname: "deno.land", - * port: 443, - * certChain: "---- BEGIN CERTIFICATE ----\n ...", - * privateKey: "---- BEGIN PRIVATE KEY ----\n ...", - * }); - * ``` - * - * Requires `allow-net` permission. - * - * @tags allow-net - * @category Network - */ - export function connectTls(options: ConnectTlsOptions): Promise; - /** **UNSTABLE**: New API, yet to be vetted. * * Acquire an advisory file-system lock for the provided file. diff --git a/ext/net/lib.deno_net.d.ts b/ext/net/lib.deno_net.d.ts index 180d8897de8d18..64744b19eb3d31 100644 --- a/ext/net/lib.deno_net.d.ts +++ b/ext/net/lib.deno_net.d.ts @@ -84,8 +84,13 @@ declare namespace Deno { } /** @category Network */ - // deno-lint-ignore no-empty-interface - export interface TlsHandshakeInfo {} + export interface TlsHandshakeInfo { + /** + * Contains the ALPN protocol selected during negotiation with the server. + * If no ALPN protocol selected, returns `null`. + */ + alpnProtocol: string | null; + } /** @category Network */ export interface TlsConn extends Conn { @@ -247,6 +252,10 @@ declare namespace Deno { * TLS handshake. */ alpnProtocols?: string[]; + /** PEM formatted client certificate chain. */ + certChain?: string; + /** PEM formatted (RSA or PKCS8) private key of client certificate. */ + privateKey?: string; } /** Establishes a secure connection over TLS (transport layer security) using diff --git a/ext/net/ops_tls.rs b/ext/net/ops_tls.rs index a3644397752418..d16bface4ce783 100644 --- a/ext/net/ops_tls.rs +++ b/ext/net/ops_tls.rs @@ -261,13 +261,6 @@ where .try_borrow::() .and_then(|it| it.0.clone()); - if args.cert_chain.is_some() { - super::check_unstable(&state.borrow(), "ConnectTlsOptions.certChain"); - } - if args.private_key.is_some() { - super::check_unstable(&state.borrow(), "ConnectTlsOptions.privateKey"); - } - { let mut s = state.borrow_mut(); let permissions = s.borrow_mut::();