Skip to content

Commit f59cf98

Browse files
committed
feat: add IP allowlisting, query timeout, and auto read routing (#685)
Synced from sferarc/pgbeam@0115d96
1 parent 8ee2502 commit f59cf98

14 files changed

Lines changed: 59 additions & 9 deletions
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"type":"object","description":"Request body for registering an upstream database.","required":["host","port","name","username","password"],"properties":{"host":{"type":"string","minLength":1,"pattern":"^[^\\s\\x00]+$","description":"PostgreSQL host."},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"PostgreSQL port."},"name":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL database name."},"username":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL username."},"password":{"type":"string","format":"password","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL password. Stored encrypted at rest.","writeOnly":true},"ssl_mode":{"type":"string","enum":["disable","allow","prefer","require","verify-ca","verify-full"],"description":"PostgreSQL SSL connection mode.","x-readme-ref-name":"SSLMode"},"role":{"type":"string","enum":["primary","replica"],"description":"Database role. Primary receives writes, replicas receive reads.","default":"primary","x-readme-ref-name":"DatabaseRole"},"pool_region":{"type":"string","description":"Region where the connection pool is maintained (near the database). When set and different from the client's edge region, queries are relayed through the pool region's data plane. Empty means direct connection.\n","example":"us-east-1"},"cache_config":{"type":"object","description":"Query cache configuration.","required":["enabled","ttl_seconds","max_entries","swr_seconds"],"properties":{"enabled":{"type":"boolean","default":true,"description":"Whether query caching is enabled. When false, all queries bypass the cache."},"ttl_seconds":{"type":"integer","minimum":0,"maximum":86400,"default":60,"description":"Cache TTL in seconds for query results."},"max_entries":{"type":"integer","minimum":0,"maximum":1000000,"default":10000,"description":"Maximum number of cached query results."},"swr_seconds":{"type":"integer","minimum":0,"maximum":86400,"default":30,"description":"Stale-while-revalidate window in seconds."}},"x-readme-ref-name":"CacheConfig"},"pool_config":{"type":"object","description":"Connection pool configuration.","required":["pool_size","min_pool_size","pool_mode"],"properties":{"pool_size":{"type":"integer","minimum":1,"maximum":10000,"default":10,"description":"Maximum connections in the pool."},"min_pool_size":{"type":"integer","minimum":1,"maximum":10000,"default":1,"description":"Minimum idle connections maintained."},"pool_mode":{"type":"string","enum":["session","transaction","statement"],"description":"Connection pool mode.","x-readme-ref-name":"PoolMode"},"max_active":{"type":"integer","minimum":1,"maximum":10000,"default":200,"description":"Maximum concurrent upstream connections per pool."}},"x-readme-ref-name":"PoolConfig"}},"x-readme-ref-name":"CreateDatabaseRequest"}
1+
{"type":"object","description":"Request body for registering an upstream database.","required":["host","port","name","username","password"],"properties":{"host":{"type":"string","minLength":1,"pattern":"^[^\\s\\x00]+$","description":"PostgreSQL host."},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"PostgreSQL port."},"name":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL database name."},"username":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL username."},"password":{"type":"string","format":"password","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL password. Stored encrypted at rest.","writeOnly":true},"ssl_mode":{"type":"string","enum":["disable","allow","prefer","require","verify-ca","verify-full"],"description":"PostgreSQL SSL connection mode.","x-readme-ref-name":"SSLMode"},"role":{"type":"string","enum":["primary","replica"],"description":"Database role. Primary receives writes, replicas receive reads.","default":"primary","x-readme-ref-name":"DatabaseRole"},"pool_region":{"type":"string","description":"Region where the connection pool is maintained (near the database). When set and different from the client's edge region, queries are relayed through the pool region's data plane. Empty means direct connection.\n","example":"us-east-1"},"query_timeout_ms":{"type":"integer","minimum":0,"maximum":300000,"default":0,"description":"Query timeout in milliseconds. 0 means disabled (default).\n"},"auto_read_routing":{"type":"boolean","default":false,"description":"Auto-route SELECT queries to read replicas.\n"},"cache_config":{"type":"object","description":"Query cache configuration.","required":["enabled","ttl_seconds","max_entries","swr_seconds"],"properties":{"enabled":{"type":"boolean","default":true,"description":"Whether query caching is enabled. When false, all queries bypass the cache."},"ttl_seconds":{"type":"integer","minimum":0,"maximum":86400,"default":60,"description":"Cache TTL in seconds for query results."},"max_entries":{"type":"integer","minimum":0,"maximum":1000000,"default":10000,"description":"Maximum number of cached query results."},"swr_seconds":{"type":"integer","minimum":0,"maximum":86400,"default":30,"description":"Stale-while-revalidate window in seconds."}},"x-readme-ref-name":"CacheConfig"},"pool_config":{"type":"object","description":"Connection pool configuration.","required":["pool_size","min_pool_size","pool_mode"],"properties":{"pool_size":{"type":"integer","minimum":1,"maximum":10000,"default":10,"description":"Maximum connections in the pool."},"min_pool_size":{"type":"integer","minimum":1,"maximum":10000,"default":1,"description":"Minimum idle connections maintained."},"pool_mode":{"type":"string","enum":["session","transaction","statement"],"description":"Connection pool mode.","x-readme-ref-name":"PoolMode"},"max_active":{"type":"integer","minimum":1,"maximum":10000,"default":200,"description":"Maximum concurrent upstream connections per pool."}},"x-readme-ref-name":"PoolConfig"}},"x-readme-ref-name":"CreateDatabaseRequest"}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"type":"object","description":"Request body for creating a project and its primary database.","required":["name","org_id","database"],"properties":{"name":{"type":"string","description":"Human-readable project name.","minLength":1,"maxLength":100,"pattern":"^[^\\x00]*$"},"org_id":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"Better Auth organization ID."},"description":{"type":"string","description":"Optional project description.","maxLength":500},"tags":{"type":"array","description":"User-defined labels to attach to the project.","maxItems":10,"items":{"type":"string","maxLength":50}},"cloud":{"type":"string","enum":["aws","azure","gcp"],"description":"Cloud provider for the project.","default":"aws"},"database":{"type":"object","description":"Primary database. Created atomically with the project.","required":["host","port","name","username","password"],"properties":{"host":{"type":"string","minLength":1,"pattern":"^[^\\s\\x00]+$","description":"PostgreSQL host."},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"PostgreSQL port."},"name":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL database name."},"username":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL username."},"password":{"type":"string","format":"password","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL password. Stored encrypted at rest.","writeOnly":true},"ssl_mode":{"type":"string","enum":["disable","allow","prefer","require","verify-ca","verify-full"],"description":"PostgreSQL SSL connection mode.","x-readme-ref-name":"SSLMode"},"role":{"type":"string","enum":["primary","replica"],"description":"Database role. Primary receives writes, replicas receive reads.","default":"primary","x-readme-ref-name":"DatabaseRole"},"pool_region":{"type":"string","description":"Region where the connection pool is maintained (near the database). When set and different from the client's edge region, queries are relayed through the pool region's data plane. Empty means direct connection.\n","example":"us-east-1"},"cache_config":{"type":"object","description":"Query cache configuration.","required":["enabled","ttl_seconds","max_entries","swr_seconds"],"properties":{"enabled":{"type":"boolean","default":true,"description":"Whether query caching is enabled. When false, all queries bypass the cache."},"ttl_seconds":{"type":"integer","minimum":0,"maximum":86400,"default":60,"description":"Cache TTL in seconds for query results."},"max_entries":{"type":"integer","minimum":0,"maximum":1000000,"default":10000,"description":"Maximum number of cached query results."},"swr_seconds":{"type":"integer","minimum":0,"maximum":86400,"default":30,"description":"Stale-while-revalidate window in seconds."}},"x-readme-ref-name":"CacheConfig"},"pool_config":{"type":"object","description":"Connection pool configuration.","required":["pool_size","min_pool_size","pool_mode"],"properties":{"pool_size":{"type":"integer","minimum":1,"maximum":10000,"default":10,"description":"Maximum connections in the pool."},"min_pool_size":{"type":"integer","minimum":1,"maximum":10000,"default":1,"description":"Minimum idle connections maintained."},"pool_mode":{"type":"string","enum":["session","transaction","statement"],"description":"Connection pool mode.","x-readme-ref-name":"PoolMode"},"max_active":{"type":"integer","minimum":1,"maximum":10000,"default":200,"description":"Maximum concurrent upstream connections per pool."}},"x-readme-ref-name":"PoolConfig"}},"x-readme-ref-name":"CreateDatabaseRequest"}},"x-readme-ref-name":"CreateProjectRequest"}
1+
{"type":"object","description":"Request body for creating a project and its primary database.","required":["name","org_id","database"],"properties":{"name":{"type":"string","description":"Human-readable project name.","minLength":1,"maxLength":100,"pattern":"^[^\\x00]*$"},"org_id":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"Better Auth organization ID."},"description":{"type":"string","description":"Optional project description.","maxLength":500},"tags":{"type":"array","description":"User-defined labels to attach to the project.","maxItems":10,"items":{"type":"string","maxLength":50}},"cloud":{"type":"string","enum":["aws","azure","gcp"],"description":"Cloud provider for the project.","default":"aws"},"database":{"type":"object","description":"Primary database. Created atomically with the project.","required":["host","port","name","username","password"],"properties":{"host":{"type":"string","minLength":1,"pattern":"^[^\\s\\x00]+$","description":"PostgreSQL host."},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"PostgreSQL port."},"name":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL database name."},"username":{"type":"string","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL username."},"password":{"type":"string","format":"password","minLength":1,"pattern":"^[^\\x00]+$","description":"PostgreSQL password. Stored encrypted at rest.","writeOnly":true},"ssl_mode":{"type":"string","enum":["disable","allow","prefer","require","verify-ca","verify-full"],"description":"PostgreSQL SSL connection mode.","x-readme-ref-name":"SSLMode"},"role":{"type":"string","enum":["primary","replica"],"description":"Database role. Primary receives writes, replicas receive reads.","default":"primary","x-readme-ref-name":"DatabaseRole"},"pool_region":{"type":"string","description":"Region where the connection pool is maintained (near the database). When set and different from the client's edge region, queries are relayed through the pool region's data plane. Empty means direct connection.\n","example":"us-east-1"},"query_timeout_ms":{"type":"integer","minimum":0,"maximum":300000,"default":0,"description":"Query timeout in milliseconds. 0 means disabled (default).\n"},"auto_read_routing":{"type":"boolean","default":false,"description":"Auto-route SELECT queries to read replicas.\n"},"cache_config":{"type":"object","description":"Query cache configuration.","required":["enabled","ttl_seconds","max_entries","swr_seconds"],"properties":{"enabled":{"type":"boolean","default":true,"description":"Whether query caching is enabled. When false, all queries bypass the cache."},"ttl_seconds":{"type":"integer","minimum":0,"maximum":86400,"default":60,"description":"Cache TTL in seconds for query results."},"max_entries":{"type":"integer","minimum":0,"maximum":1000000,"default":10000,"description":"Maximum number of cached query results."},"swr_seconds":{"type":"integer","minimum":0,"maximum":86400,"default":30,"description":"Stale-while-revalidate window in seconds."}},"x-readme-ref-name":"CacheConfig"},"pool_config":{"type":"object","description":"Connection pool configuration.","required":["pool_size","min_pool_size","pool_mode"],"properties":{"pool_size":{"type":"integer","minimum":1,"maximum":10000,"default":10,"description":"Maximum connections in the pool."},"min_pool_size":{"type":"integer","minimum":1,"maximum":10000,"default":1,"description":"Minimum idle connections maintained."},"pool_mode":{"type":"string","enum":["session","transaction","statement"],"description":"Connection pool mode.","x-readme-ref-name":"PoolMode"},"max_active":{"type":"integer","minimum":1,"maximum":10000,"default":200,"description":"Maximum concurrent upstream connections per pool."}},"x-readme-ref-name":"PoolConfig"}},"x-readme-ref-name":"CreateDatabaseRequest"}},"x-readme-ref-name":"CreateProjectRequest"}

0 commit comments

Comments
 (0)