1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-03 04:48:52 -05:00
denoland-deno/ext/kv
Matt Mastracci 684377c92c
refactor(ext/tls): Implement required functionality for later SNI support (#23686)
Precursor to #23236 

This implements the SNI features, but uses private symbols to avoid
exposing the functionality at this time. Note that to properly test this
feature, we need to add a way for `connectTls` to specify a hostname.
This is something that should be pushed into that API at a later time as
well.

```ts
Deno.test(
  { permissions: { net: true, read: true } },
  async function listenResolver() {
    let sniRequests = [];
    const listener = Deno.listenTls({
      hostname: "localhost",
      port: 0,
      [resolverSymbol]: (sni: string) => {
        sniRequests.push(sni);
        return {
          cert,
          key,
        };
      },
    });

    {
      const conn = await Deno.connectTls({
        hostname: "localhost",
        [serverNameSymbol]: "server-1",
        port: listener.addr.port,
      });
      const [_handshake, serverConn] = await Promise.all([
        conn.handshake(),
        listener.accept(),
      ]);
      conn.close();
      serverConn.close();
    }

    {
      const conn = await Deno.connectTls({
        hostname: "localhost",
        [serverNameSymbol]: "server-2",
        port: listener.addr.port,
      });
      const [_handshake, serverConn] = await Promise.all([
        conn.handshake(),
        listener.accept(),
      ]);
      conn.close();
      serverConn.close();
    }

    assertEquals(sniRequests, ["server-1", "server-2"]);
    listener.close();
  },
);
```

---------

Signed-off-by: Matt Mastracci <matthew@mastracci.com>
2024-05-09 10:54:47 -06:00
..
01_db.ts refactor: migrate extensions to virtual ops module (#22135) 2024-01-26 23:46:46 +01:00
Cargo.toml chore: forward v1.43.2 release commit to main (#23749) 2024-05-09 00:45:01 +00:00
dynamic.rs chore: update copyright to 2024 (#21753) 2024-01-01 19:58:21 +00:00
interface.rs chore: update copyright to 2024 (#21753) 2024-01-01 19:58:21 +00:00
lib.rs perf(cli): use faster_hex (#22761) 2024-03-07 10:00:43 -07:00
README.md chore: update ext/kv to use denokv_* crates (#20986) 2023-10-31 11:13:57 +00:00
remote.rs refactor(ext/tls): Implement required functionality for later SNI support (#23686) 2024-05-09 10:54:47 -06:00
sqlite.rs chore: update copyright to 2024 (#21753) 2024-01-01 19:58:21 +00:00
time.rs refactor: use chrono::DateTime::from_timestamp (#23273) 2024-04-08 21:46:54 +00:00

deno_kv

This crate provides a key/value store for Deno. For an overview of Deno KV, please read the manual.

Storage Backends

Deno KV has a pluggable storage interface that supports multiple backends:

  • SQLite - backed by a local SQLite database. This backend is suitable for development and is the default when running locally. It is implemented in the denokv_sqlite crate.
  • Remote - backed by a remote service that implements the KV Connect protocol, for example Deno Deploy.

Additional backends can be added by implementing the Database trait.

KV Connect

The KV Connect protocol allows the Deno CLI to communicate with a remote KV database. The specification for the protocol, and the protobuf definitions can be found in the denokv repository, under the proto directory.