drizzle-edge-pg-proxy-client
Version:
PostgreSQL HTTP client compatible with Neon's interface for edge environments
271 lines (261 loc) • 8.19 kB
TypeScript
import * as drizzle_orm_neon_http from 'drizzle-orm/neon-http';
declare class QueryPromise<T = any> implements Promise<T> {
private executeFn;
readonly [Symbol.toStringTag]: string;
queryData: ParameterizedQuery;
opts?: any;
constructor(executeFn: (query: string, params: any[]) => Promise<T>, queryObj: ParameterizedQuery, opts?: any);
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined): Promise<TResult1 | TResult2>;
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined): Promise<T | TResult>;
finally(onfinally?: (() => void) | null | undefined): Promise<T>;
[Symbol.iterator](): Iterator<T>;
}
declare enum PgTypeId {
BOOL = 16,
BYTEA = 17,
CHAR = 18,
INT8 = 20,
INT2 = 21,
INT4 = 23,
REGPROC = 24,
TEXT = 25,
OID = 26,
TID = 27,
XID = 28,
CID = 29,
JSON = 114,
XML = 142,
PG_NODE_TREE = 194,
JSONB = 3802,
FLOAT4 = 700,
FLOAT8 = 701,
ABSTIME = 702,
RELTIME = 703,
TINTERVAL = 704,
CIRCLE = 718,
MONEY = 790,
MACADDR = 829,
INET = 869,
CIDR = 650,
MACADDR8 = 774,
ACLITEM = 1033,
BPCHAR = 1042,
VARCHAR = 1043,
DATE = 1082,
TIME = 1083,
TIMESTAMP = 1114,
TIMESTAMPTZ = 1184,
INTERVAL = 1186,
TIMETZ = 1266,
BIT = 1560,
VARBIT = 1562,
NUMERIC = 1700,
REFCURSOR = 1790,
REGPROCEDURE = 2202,
REGOPER = 2203,
REGOPERATOR = 2204,
REGCLASS = 2205,
REGTYPE = 2206,
UUID = 2950,
TXID_SNAPSHOT = 2970,
PG_LSN = 3220,
PG_NDISTINCT = 3361,
PG_DEPENDENCIES = 3402,
TSVECTOR = 3614,
TSQUERY = 3615,
GTSVECTOR = 3642,
REGCONFIG = 3734,
REGDICTIONARY = 3769,
JSONPATH = 4072,
REGNAMESPACE = 4089,
REGROLE = 4096,
BOOL_ARRAY = 1000,// Boolean Array -> 16 + 1000 - 16 = 1000
BYTEA_ARRAY = 1001,// Bytea Array -> 17 + 1000 - 16 = 1001
CHAR_ARRAY = 1002,// Char Array -> 18 + 1000 - 16 = 1002
INT8_ARRAY = 1016,// BigInt Array -> 20 + 1000 - 4 = 1016
INT2_ARRAY = 1005,// SmallInt Array -> 21 + 1000 - 16 = 1005
INT4_ARRAY = 1007,// Integer Array -> 23 + 1000 - 16 = 1007
TEXT_ARRAY = 1009,// Text Array -> 25 + 1000 - 16 = 1009
JSON_ARRAY = 199,// JSON Array -> 114 + 1000 - 915 = 199
JSONB_ARRAY = 3807,// JSONB Array -> 3802 + 5 = 3807
FLOAT4_ARRAY = 1021,// Float4 Array -> 700 + 1000 - 679 = 1021
FLOAT8_ARRAY = 1022,// Float8 Array -> 701 + 1000 - 679 = 1022
NUMERIC_ARRAY = 1231,// Numeric Array -> 1700 + 1000 - 1469 = 1231
DATE_ARRAY = 1182,// Date Array -> 1082 + 100 = 1182
TIMESTAMP_ARRAY = 1115,// Timestamp Array -> 1114 + 1 = 1115
TIMESTAMPTZ_ARRAY = 1185,// Timestamptz Array -> 1184 + 1 = 1185
UUID_ARRAY = 2951,// UUID Array -> 2950 + 1 = 2951
VARCHAR_ARRAY = 1015
}
declare class TypeParser {
private parsers;
constructor(customTypes?: Record<number, (value: string) => any>);
private initializeDefaultParsers;
private setupArrayTypeParsers;
setTypeParser(typeId: number, parseFn: (value: string) => any): void;
getTypeParser(typeId: number): (value: string) => any;
}
interface PgQueryResult {
command: string;
fields: PgField[];
rowCount: number;
rows: any[];
rowAsArray: boolean;
_parsers?: any[];
_types?: TypeParser;
}
interface PgField {
name: string;
tableID: number;
columnID: number;
dataTypeID: number;
dataTypeSize: number;
dataTypeModifier: number;
format: string;
}
interface ParameterizedQuery {
query: string;
params: any[];
}
type SQLTemplateTag = (strings: TemplateStringsArray, ...values: any[]) => QueryPromise<PgQueryResult>;
interface TransactionQuery {
text: string;
values: unknown[];
captureGeneratedId?: boolean;
}
interface ClientOptions {
proxyUrl: string;
authToken?: string;
fetch?: typeof globalThis.fetch;
arrayMode?: boolean;
fullResults?: boolean;
typeParser?: TypeParser | Record<number, (value: string) => any>;
sessionId?: string;
logger?: LoggerOptions;
}
declare enum LogLevel {
Debug = 1,
Info = 2,
Warn = 3,
Error = 4,
None = 5
}
interface LoggerOptions {
level?: LogLevel;
logFn?: (level: LogLevel, message: string, data?: any) => void;
}
declare class UnsafeRawSql {
sql: string;
constructor(sql: string);
}
declare class PgError extends Error {
name: "PgError";
severity?: string;
code?: string;
detail?: string;
hint?: string;
position?: string;
internalPosition?: string;
internalQuery?: string;
where?: string;
schema?: string;
table?: string;
column?: string;
dataType?: string;
constraint?: string;
file?: string;
line?: string;
routine?: string;
sourceError?: Error;
constructor(message: string);
}
declare function createPgHttpClient({ proxyUrl, authToken, fetch: customFetch, arrayMode, fullResults, typeParser: customTypeParser, sessionId, logger: loggerOptions }: ClientOptions): {
execute: (queryText: string, params?: any[]) => Promise<PgQueryResult>;
query: (queryText: string, params?: any[], options?: {
arrayMode?: boolean;
fullResults?: boolean;
}) => Promise<PgQueryResult>;
sql: (strings: TemplateStringsArray, ...values: unknown[]) => QueryPromise<PgQueryResult>;
unsafe: (rawSql: string) => UnsafeRawSql;
transaction: (queries: (TransactionQuery | QueryPromise<PgQueryResult>)[], options?: {
isolationLevel?: "ReadUncommitted" | "ReadCommitted" | "RepeatableRead" | "Serializable";
readOnly?: boolean;
deferrable?: boolean;
arrayMode?: boolean;
fullResults?: boolean;
}) => Promise<any[]>;
typeParser: TypeParser;
};
/**
* Creates a Drizzle client connecting to PostgreSQL via HTTP proxy.
* This client is compatible with both drizzle-orm and Auth.js.
*
* @param options Configuration options
* @returns Drizzle ORM instance for your database
*/
declare function drizzle<TSchema extends Record<string, unknown>>(options: {
proxyUrl: string;
authToken?: string;
schema: TSchema;
fetch?: typeof globalThis.fetch;
arrayMode?: boolean;
fullResults?: boolean;
typeParser?: TypeParser | Record<number, (value: string) => any>;
logger?: LoggerOptions;
}): drizzle_orm_neon_http.NeonHttpDatabase<TSchema> & {
$client: any;
};
/**
* Common types used throughout the package
*/
/**
* Options for creating a PostgreSQL HTTP client
*/
interface PgHttpClientOptions {
/**
* URL of the PostgreSQL HTTP proxy server
*/
proxyUrl: string;
/**
* Optional authentication token for the proxy server
*/
authToken?: string;
/**
* Optional fetch implementation (uses globalThis.fetch by default)
*/
fetch?: typeof globalThis.fetch;
}
/**
* Options for creating a Drizzle ORM client
*/
interface DrizzleClientOptions<TSchema extends Record<string, unknown>> extends PgHttpClientOptions {
/**
* Drizzle schema definition
*/
schema: TSchema;
}
/**
* SQL query parameters
*/
interface QueryParams {
text: string;
values: unknown[];
}
/**
* Result of a SQL template literal
*/
interface SqlQueryResult {
query: string;
params: unknown[];
execute: () => Promise<any[]>;
}
/**
* PostgreSQL HTTP client interface
*/
interface PgHttpClient {
execute: (query: string, params?: unknown[]) => Promise<any[]>;
sql: (strings: TemplateStringsArray, ...values: unknown[]) => SqlQueryResult;
transaction: (queries: QueryParams[]) => Promise<any[]>;
query: (query: string, params?: unknown[]) => Promise<any[]>;
}
export { type ClientOptions, type DrizzleClientOptions, LogLevel, type ParameterizedQuery, PgError, type PgField, type PgHttpClient, type PgHttpClientOptions, type PgQueryResult, PgTypeId, type QueryParams, type SQLTemplateTag, type SqlQueryResult, TypeParser, UnsafeRawSql, createPgHttpClient, drizzle };