Skip to content
File

Blob: src/workerd/api/hyperdrive.h

cpp73 lines
1// Copyright (c) 2023 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4 
5#pragma once
6 
7#include <workerd/jsg/jsg.h>
8 
9namespace kj {
10class AsyncIoStream;
11}
12 
13namespace workerd::api {
14 
15class Socket;
16 
17// A Hyperdrive resource for development integrations.
18//
19// Provides the same interface as Hyperdrive while sending connection
20// traffic directly to postgres
21class Hyperdrive: public jsg::Object {
22 public:
23 // `clientIndex` is what to pass to IoContext::getHttpClient() to get an HttpClient
24 // representing this namespace.
25 explicit Hyperdrive(uint clientIndex,
26 kj::String database,
27 kj::String user,
28 kj::String password,
29 kj::String scheme);
30 jsg::Ref<Socket> connect(jsg::Lock& js);
31 kj::StringPtr getDatabase();
32 kj::StringPtr getUser();
33 kj::StringPtr getPassword();
34 kj::StringPtr getScheme();
35 
36 kj::StringPtr getHost();
37 uint16_t getPort();
38 
39 kj::String getConnectionString();
40 
41 JSG_RESOURCE_TYPE(Hyperdrive) {
42 JSG_LAZY_READONLY_INSTANCE_PROPERTY(database, getDatabase);
43 JSG_LAZY_READONLY_INSTANCE_PROPERTY(user, getUser);
44 JSG_LAZY_READONLY_INSTANCE_PROPERTY(password, getPassword);
45 JSG_LAZY_READONLY_INSTANCE_PROPERTY(host, getHost);
46 JSG_LAZY_READONLY_INSTANCE_PROPERTY(port, getPort);
47 JSG_LAZY_READONLY_INSTANCE_PROPERTY(connectionString, getConnectionString);
48 
49 JSG_METHOD(connect);
50 }
51 
52 void visitForMemoryInfo(jsg::MemoryTracker& tracker) const {
53 tracker.trackField("randomHost", randomHost);
54 tracker.trackField("database", database);
55 tracker.trackField("user", user);
56 tracker.trackField("password", password);
57 tracker.trackField("scheme", scheme);
58 }
59 
60 private:
61 uint clientIndex;
62 kj::String randomHost;
63 kj::String database;
64 kj::String user;
65 kj::String password;
66 kj::String scheme;
67 bool registeredConnectOverride = false;
68 
69 kj::Promise<kj::Own<kj::AsyncIoStream>> connectToDb();
70};
71#define EW_HYPERDRIVE_ISOLATE_TYPES api::Hyperdrive
72} // namespace workerd::api