123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434 |
- // This file was modified by Oracle on November 04, 2021.
- // Type definitions and corresponding descriptions were introduced for the
- // connection options relevant for multifactor authentication.
- // Modifications copyright (c) 2021, Oracle and/or its affiliates.
- import { EventEmitter } from 'events';
- import { Readable } from 'stream';
- import { Query, QueryError } from './protocol/sequences/Query.js';
- import { Prepare, PrepareStatementInfo } from './protocol/sequences/Prepare.js';
- import {
- OkPacket,
- FieldPacket,
- RowDataPacket,
- ResultSetHeader,
- OkPacketParams,
- ErrorPacketParams,
- } from './protocol/packets/index.js';
- import { Connection as PromiseConnection } from '../../../promise.js';
- import { AuthPlugin } from './Auth.js';
- import { QueryableBase } from './protocol/sequences/QueryableBase.js';
- import { ExecutableBase } from './protocol/sequences/ExecutableBase.js';
- import { TypeCast } from './parsers/typeCast.js';
- export interface SslOptions {
- /**
- * A string or buffer holding the PFX or PKCS12 encoded private key, certificate and CA certificates
- */
- pfx?: string;
- /**
- * Either a string/buffer or list of strings/Buffers holding the PEM encoded private key(s) to use
- */
- key?: string | string[] | Buffer | Buffer[];
- /**
- * A string of passphrase for the private key or pfx
- */
- passphrase?: string;
- /**
- * A string/buffer or list of strings/Buffers holding the PEM encoded certificate(s)
- */
- cert?: string | string[] | Buffer | Buffer[];
- /**
- * Either a string/Buffer or list of strings/Buffers of PEM encoded CA certificates to trust.
- */
- ca?: string | string[] | Buffer | Buffer[];
- /**
- * Either a string or list of strings of PEM encoded CRLs (Certificate Revocation List)
- */
- crl?: string | string[];
- /**
- * A string describing the ciphers to use or exclude
- */
- ciphers?: string;
- /**
- * You can also connect to a MySQL server without properly providing the appropriate CA to trust. You should not do this.
- */
- rejectUnauthorized?: boolean;
- /**
- * Configure the minimum supported version of SSL, the default is TLSv1.2.
- */
- minVersion?: string;
- /**
- * Configure the maximum supported version of SSL, the default is TLSv1.3.
- */
- maxVersion?: string;
- /**
- * You can verify the server name identity presented on the server certificate when connecting to a MySQL server.
- * You should enable this but it is disabled by default right now for backwards compatibility.
- */
- verifyIdentity?: boolean;
- }
- export interface ConnectionOptions {
- /**
- * DECIMAL and NEWDECIMAL types will be returned as numbers if this option is set to `true` ( default: `false`).
- */
- decimalNumbers?: boolean;
- /**
- * The MySQL user to authenticate as
- */
- user?: string;
- /**
- * The password of that MySQL user
- */
- password?: string;
- /**
- * Alias for the MySQL user password. Makes a bit more sense in a multifactor authentication setup (see
- * "password2" and "password3")
- */
- password1?: string;
- /**
- * 2nd factor authentication password. Mandatory when the authentication policy for the MySQL user account
- * requires an additional authentication method that needs a password.
- * https://dev.mysql.com/doc/refman/8.0/en/multifactor-authentication.html
- */
- password2?: string;
- /**
- * 3rd factor authentication password. Mandatory when the authentication policy for the MySQL user account
- * requires two additional authentication methods and the last one needs a password.
- * https://dev.mysql.com/doc/refman/8.0/en/multifactor-authentication.html
- */
- password3?: string;
- /**
- * Name of the database to use for this connection
- */
- database?: string;
- /**
- * The charset for the connection. This is called 'collation' in the SQL-level of MySQL (like utf8_general_ci).
- * If a SQL-level charset is specified (like utf8mb4) then the default collation for that charset is used.
- * (Default: 'UTF8_GENERAL_CI')
- */
- charset?: string;
- /**
- * The hostname of the database you are connecting to. (Default: localhost)
- */
- host?: string;
- /**
- * The port number to connect to. (Default: 3306)
- */
- port?: number;
- /**
- * The source IP address to use for TCP connection
- */
- localAddress?: string;
- /**
- * The path to a unix domain socket to connect to. When used host and port are ignored
- */
- socketPath?: string;
- /**
- * The timezone used to store local dates. (Default: 'local')
- */
- timezone?: string | 'local';
- /**
- * The milliseconds before a timeout occurs during the initial connection to the MySQL server. (Default: 10 seconds)
- */
- connectTimeout?: number;
- /**
- * Stringify objects instead of converting to values. (Default: 'false')
- */
- stringifyObjects?: boolean;
- /**
- * Allow connecting to MySQL instances that ask for the old (insecure) authentication method. (Default: false)
- */
- insecureAuth?: boolean;
- /**
- * By specifying a function that returns a readable stream, an arbitrary stream can be sent when sending a local fs file.
- */
- infileStreamFactory?: (path: string) => Readable;
- /**
- * Determines if column values should be converted to native JavaScript types.
- *
- * @default true
- *
- * It is not recommended (and may go away / change in the future) to disable type casting, but you can currently do so on either the connection or query level.
- *
- * ---
- *
- * You can also specify a function to do the type casting yourself:
- * ```ts
- * (field: Field, next: () => unknown) => {
- * return next();
- * }
- * ```
- *
- * ---
- *
- * **WARNING:**
- *
- * YOU MUST INVOKE the parser using one of these three field functions in your custom typeCast callback. They can only be called once:
- *
- * ```js
- * field.string();
- * field.buffer();
- * field.geometry();
- * ```
- * Which are aliases for:
- *
- * ```js
- * parser.parseLengthCodedString();
- * parser.parseLengthCodedBuffer();
- * parser.parseGeometryValue();
- * ```
- *
- * You can find which field function you need to use by looking at `RowDataPacket.prototype._typeCast`.
- */
- typeCast?: TypeCast;
- /**
- * A custom query format function
- */
- queryFormat?: (query: string, values: any) => void;
- /**
- * When dealing with big numbers (BIGINT and DECIMAL columns) in the database, you should enable this option
- * (Default: false)
- */
- supportBigNumbers?: boolean;
- /**
- * Enabling both supportBigNumbers and bigNumberStrings forces big numbers (BIGINT and DECIMAL columns) to be
- * always returned as JavaScript String objects (Default: false). Enabling supportBigNumbers but leaving
- * bigNumberStrings disabled will return big numbers as String objects only when they cannot be accurately
- * represented with [JavaScript Number objects](https://262.ecma-international.org/5.1/#sec-8.5)
- * (which happens when they exceed the [-2^53, +2^53] range), otherwise they will be returned as Number objects.
- * This option is ignored if supportBigNumbers is disabled.
- */
- bigNumberStrings?: boolean;
- /**
- * Force date types (TIMESTAMP, DATETIME, DATE) to be returned as strings rather then inflated into JavaScript Date
- * objects. Can be true/false or an array of type names to keep as strings.
- *
- * (Default: false)
- */
- dateStrings?: boolean | Array<'TIMESTAMP' | 'DATETIME' | 'DATE'>;
- /**
- * This will print all incoming and outgoing packets on stdout.
- * You can also restrict debugging to packet types by passing an array of types (strings) to debug;
- *
- * (Default: false)
- */
- debug?: any;
- /**
- * Generates stack traces on Error to include call site of library entrance ('long stack traces'). Slight
- * performance penalty for most calls. (Default: true)
- */
- trace?: boolean;
- /**
- * Allow multiple mysql statements per query. Be careful with this, it exposes you to SQL injection attacks. (Default: false)
- */
- multipleStatements?: boolean;
- /**
- * List of connection flags to use other than the default ones. It is also possible to blacklist default ones
- */
- flags?: Array<string>;
- /**
- * object with ssl parameters or a string containing name of ssl profile
- */
- ssl?: string | SslOptions;
- /**
- * Return each row as an array, not as an object.
- * This is useful when you have duplicate column names.
- * This can also be set in the `QueryOption` object to be applied per-query.
- */
- rowsAsArray?: boolean;
- /**
- * Enable keep-alive on the socket. (Default: true)
- */
- enableKeepAlive?: boolean;
- /**
- * If keep-alive is enabled users can supply an initial delay. (Default: 0)
- */
- keepAliveInitialDelay?: number;
- charsetNumber?: number;
- compress?: boolean;
- authSwitchHandler?: (data: any, callback: () => void) => any;
- connectAttributes?: { [param: string]: any };
- isServer?: boolean;
- maxPreparedStatements?: number;
- namedPlaceholders?: boolean;
- nestTables?: boolean | string;
- passwordSha1?: string;
- pool?: any;
- stream?: any;
- uri?: string;
- connectionLimit?: number;
- maxIdle?: number;
- idleTimeout?: number;
- Promise?: any;
- queueLimit?: number;
- waitForConnections?: boolean;
- authPlugins?: {
- [key: string]: AuthPlugin;
- };
- /**
- * Force JSON to be returned as string
- *
- * (Default: false)
- */
- jsonStrings?: boolean;
- }
- declare class Connection extends QueryableBase(ExecutableBase(EventEmitter)) {
- config: ConnectionOptions;
- threadId: number;
- authorized: boolean;
- static createQuery<
- T extends
- | RowDataPacket[][]
- | RowDataPacket[]
- | OkPacket
- | OkPacket[]
- | ResultSetHeader,
- >(
- sql: string,
- callback?: (
- err: QueryError | null,
- result: T,
- fields: FieldPacket[],
- ) => any,
- ): Query;
- static createQuery<
- T extends
- | RowDataPacket[][]
- | RowDataPacket[]
- | OkPacket
- | OkPacket[]
- | ResultSetHeader,
- >(
- sql: string,
- values: any | any[] | { [param: string]: any },
- callback?: (
- err: QueryError | null,
- result: T,
- fields: FieldPacket[],
- ) => any,
- ): Query;
- beginTransaction(callback: (err: QueryError | null) => void): void;
- connect(callback?: (err: QueryError | null) => void): void;
- commit(callback?: (err: QueryError | null) => void): void;
- changeUser(
- options: ConnectionOptions,
- callback?: (err: QueryError | null) => void,
- ): void;
- end(callback?: (err: QueryError | null) => void): void;
- end(options: any, callback?: (err: QueryError | null) => void): void;
- destroy(): void;
- pause(): void;
- resume(): void;
- escape(value: any): string;
- escapeId(value: string): string;
- escapeId(values: string[]): string;
- format(sql: string, values?: any | any[] | { [param: string]: any }): string;
- on(event: string, listener: (...args: any[]) => void): this;
- rollback(callback: (err: QueryError | null) => void): void;
- prepare(
- sql: string,
- callback?: (err: QueryError | null, statement: PrepareStatementInfo) => any,
- ): Prepare;
- unprepare(sql: string): PrepareStatementInfo;
- serverHandshake(args: any): any;
- promise(promiseImpl?: PromiseConstructor): PromiseConnection;
- ping(callback?: (err: QueryError | null) => any): void;
- writeOk(args?: OkPacketParams): void;
- writeError(args?: ErrorPacketParams): void;
- writeEof(warnings?: number, statusFlags?: number): void;
- writeTextResult(rows?: Array<any>, columns?: Array<any>): void;
- writePacket(packet: any): void;
- sequenceId: number;
- }
- export { Connection };
|