@pma-network/sql 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/MySQL.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Pool, PoolConnection, RowDataPacket } from "mysql2/promise";
2
- import type { BatchQuery, ConnectionConfig, QueryParameters, TransactionCallback, TransactionResult } from "./types.js";
2
+ import type { BatchQuery, ConnectionConfig, QueryOptions, QueryParameters, TableSchema, TransactionCallback, TransactionResult } from "./types.js";
3
3
  /**
4
4
  * MySQL database wrapper with connection pooling and named parameter support.
5
5
  * Automatically reads connection configuration from environment variables.
@@ -14,14 +14,106 @@ export declare class MySQL {
14
14
  private versionPrefix;
15
15
  private metricsExportResource;
16
16
  private metricsExportFunction;
17
+ private defaultQueryOptions;
18
+ private sshProcess;
19
+ private initializationPromise;
20
+ private schemas;
21
+ private autoSync;
22
+ private syncComplete;
17
23
  /**
18
24
  * Creates a new MySQL instance with connection pooling.
19
25
  * If no config is provided, it will automatically look for connection strings in environment variables.
20
26
  *
27
+ * SSH tunnel connections (mysql-ssh://) are supported and initialized automatically.
28
+ *
21
29
  * @param config - Optional database configuration. If omitted, uses environment variables.
22
30
  * @throws {Error} If no connection string is found or if connection string validation fails
23
31
  */
24
32
  constructor(config?: ConnectionConfig);
33
+ private initializeSSH;
34
+ private ensureInitialized;
35
+ /**
36
+ * Defines a table schema that can be synced to the database.
37
+ *
38
+ * @param tableName - Name of the table
39
+ * @param schema - Table schema definition
40
+ * @example
41
+ * db.defineSchema('users', {
42
+ * columns: {
43
+ * id: { type: 'INT', primaryKey: true, autoIncrement: true },
44
+ * name: { type: 'VARCHAR(255)', nullable: false },
45
+ * email: { type: 'VARCHAR(255)', unique: true },
46
+ * created_at: { type: 'TIMESTAMP', default: 'CURRENT_TIMESTAMP' }
47
+ * },
48
+ * indexes: ['INDEX idx_email (email)']
49
+ * });
50
+ *
51
+ * // Or use shorthand string syntax
52
+ * db.defineSchema('logs', {
53
+ * columns: {
54
+ * id: 'INT AUTO_INCREMENT PRIMARY KEY',
55
+ * message: 'TEXT NOT NULL',
56
+ * level: 'VARCHAR(20) DEFAULT "info"'
57
+ * }
58
+ * });
59
+ */
60
+ defineSchema(tableName: string, schema: TableSchema): this;
61
+ /**
62
+ * Syncs all defined schemas to the database, creating tables if they don't exist.
63
+ *
64
+ * @returns Promise that resolves when sync is complete
65
+ * @example
66
+ * db.defineSchema('users', { ... });
67
+ * db.defineSchema('posts', { ... });
68
+ * await db.sync();
69
+ */
70
+ sync(): Promise<void>;
71
+ private buildColumnDefinition;
72
+ private createTableIfNotExists;
73
+ /**
74
+ * Creates a new MySQL instance with SSH tunnel support.
75
+ * Use this factory method when connecting through an SSH bastion/jump host.
76
+ *
77
+ * Supports two formats:
78
+ * 1. Separate SSH config object
79
+ * 2. mysql-ssh:// connection string (uses SSH_AUTH_SOCK for auth by default)
80
+ *
81
+ * @param config - Database configuration with SSH tunnel settings
82
+ * @returns Promise resolving to a MySQL instance connected through SSH tunnel
83
+ * @throws {Error} If SSH connection fails
84
+ * @throws {Error} If no connection string is found
85
+ * @example
86
+ * // Using mysql-ssh:// URL (recommended for 1Password/ssh-agent)
87
+ * const db = await MySQL.createWithSSH({
88
+ * connectionString: 'mysql-ssh://deploy@bastion.example.com/mydb?user=admin&password=secret'
89
+ * });
90
+ *
91
+ * // Using separate SSH config
92
+ * const db = await MySQL.createWithSSH({
93
+ * connectionString: 'mysql://user:pass@localhost:3306/database',
94
+ * ssh: {
95
+ * host: 'bastion.example.com',
96
+ * username: 'ssh-user',
97
+ * }
98
+ * });
99
+ */
100
+ static createWithSSH(config?: ConnectionConfig): Promise<MySQL>;
101
+ private isSSHConnectionString;
102
+ /**
103
+ * Parses a mysql-ssh:// connection string into SSH and MySQL configs.
104
+ *
105
+ * Format: mysql-ssh://sshuser@sshhost[:sshport]/database?user=dbuser&password=dbpass[&host=dbhost][&port=dbport]
106
+ *
107
+ * @example
108
+ * mysql-ssh://deploy@bastion.example.com/mydb?user=admin&password=secret
109
+ * mysql-ssh://deploy@bastion.example.com:2222/mydb?user=admin&password=secret&host=internal-db&port=3307
110
+ */
111
+ private parseSSHConnectionString;
112
+ private initializePool;
113
+ private initializeWithSSH;
114
+ private initializeFromSSHConnectionString;
115
+ private createSSHTunnel;
116
+ private getQueryOption;
25
117
  private fetchServerVersion;
26
118
  private getConvar;
27
119
  private getConvarInt;
@@ -55,10 +147,10 @@ export declare class MySQL {
55
147
  * @throws {TypeError} If connection string is not a valid URL
56
148
  */
57
149
  private parseConnectionString;
58
- private normalizeParameters;
59
150
  private setupConvarListeners;
60
151
  private scheduleResourceTick;
61
- private executeWithTiming;
152
+ private isTimeoutError;
153
+ private executePoolMethod;
62
154
  private exportMetric;
63
155
  private replaceAtSymbols;
64
156
  /**
@@ -86,7 +178,7 @@ export declare class MySQL {
86
178
  * @example
87
179
  * const result = await db.rawExecute('SELECT * FROM users WHERE uid = ?', [1]);
88
180
  */
89
- rawExecute<T = unknown>(query: string, parameters?: unknown[]): Promise<T | null>;
181
+ rawExecute<T = unknown>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
90
182
  /**
91
183
  * Executes a SQL query and returns the raw results.
92
184
  * Supports SELECT, INSERT, UPDATE, DELETE, and other SQL statements.
@@ -94,11 +186,12 @@ export declare class MySQL {
94
186
  *
95
187
  * @param query - SQL query with :name or ? placeholders
96
188
  * @param parameters - Parameter values as object or array
189
+ * @param queryOptions - Query options to use for this query
97
190
  * @returns Query result
98
191
  * @example
99
192
  * const result = await db.execute('SELECT * FROM users WHERE uid = :uid', { uid: 1 });
100
193
  */
101
- execute<T = unknown>(query: string, parameters?: QueryParameters): Promise<T | null>;
194
+ execute<T = unknown>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
102
195
  /**
103
196
  * Executes a SELECT query with raw positional parameters.
104
197
  * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
@@ -106,11 +199,12 @@ export declare class MySQL {
106
199
  *
107
200
  * @param query - SELECT query with ? placeholders only
108
201
  * @param parameters - Array of values (undefined values are NOT converted to null)
202
+ * @param queryOptions - Query options to use for this query
109
203
  * @returns Array of rows
110
204
  * @example
111
205
  * const users = await db.rawQuery('SELECT * FROM users WHERE job_name = ?', ['police']);
112
206
  */
113
- rawQuery<T = RowDataPacket[]>(query: string, parameters?: unknown[]): Promise<T | null>;
207
+ rawQuery<T = RowDataPacket[]>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
114
208
  /**
115
209
  * Executes a SELECT query and returns rows.
116
210
  * Use for queries returning multiple rows.
@@ -122,7 +216,7 @@ export declare class MySQL {
122
216
  * @example
123
217
  * const users = await db.query('SELECT * FROM users WHERE job_name = :job', { job: 'police' });
124
218
  */
125
- query<T = RowDataPacket[]>(query: string, parameters?: QueryParameters): Promise<T | null>;
219
+ query<T = RowDataPacket[]>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
126
220
  /**
127
221
  * Inserts a row with raw positional parameters.
128
222
  * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
@@ -130,11 +224,12 @@ export declare class MySQL {
130
224
  *
131
225
  * @param query - INSERT query with ? placeholders only
132
226
  * @param parameters - Array of values (undefined values are NOT converted to null)
227
+ * @param queryOptions - Query options to use for this query
133
228
  * @returns Insert ID or null on error
134
229
  * @example
135
230
  * const insertId = await db.rawInsert('INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (?, ?, ?, ?, ?)', [1, 1, 'John', 'Doe', 1]);
136
231
  */
137
- rawInsert(query: string, parameters?: unknown[]): Promise<number | null>;
232
+ rawInsert(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<number | null>;
138
233
  /**
139
234
  * Inserts a row into the database.
140
235
  * Returns the auto-generated ID.
@@ -142,6 +237,7 @@ export declare class MySQL {
142
237
  *
143
238
  * @param query - INSERT query with :name or ? placeholders
144
239
  * @param parameters - Values to insert
240
+ * @param queryOptions - Query options to use for this query
145
241
  * @returns Insert ID or null on error
146
242
  * @example
147
243
  * const insertId = await db.insert(
@@ -149,7 +245,7 @@ export declare class MySQL {
149
245
  * { identifier_id: 1, char_data_id: 1, first_name: 'John', last_name: 'Doe', inventory_id: 1 }
150
246
  * );
151
247
  */
152
- insert(query: string, parameters?: QueryParameters): Promise<number | null>;
248
+ insert(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<number | null>;
153
249
  /**
154
250
  * Updates rows with raw positional parameters.
155
251
  * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
@@ -157,11 +253,12 @@ export declare class MySQL {
157
253
  *
158
254
  * @param query - UPDATE query with ? placeholders only
159
255
  * @param parameters - Array of values (undefined values are NOT converted to null)
256
+ * @param queryOptions - Query options to use for this query
160
257
  * @returns Number of affected rows or null on error
161
258
  * @example
162
259
  * const affectedRows = await db.rawUpdate('UPDATE users SET job_name = ?, job_rank = ? WHERE uid = ?', ['police', 1, 123]);
163
260
  */
164
- rawUpdate(query: string, parameters?: unknown[]): Promise<number | null>;
261
+ rawUpdate(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<number | null>;
165
262
  /**
166
263
  * Updates rows in the database.
167
264
  * Returns the number of affected rows.
@@ -169,6 +266,7 @@ export declare class MySQL {
169
266
  *
170
267
  * @param query - UPDATE query with :name or ? placeholders
171
268
  * @param parameters - Values to update
269
+ * @param queryOptions - Query options to use for this query
172
270
  * @returns Number of affected rows or null on error
173
271
  * @example
174
272
  * const affectedRows = await db.update(
@@ -176,7 +274,7 @@ export declare class MySQL {
176
274
  * { job: 'police', rank: 1, uid: 123 }
177
275
  * );
178
276
  */
179
- update(query: string, parameters?: QueryParameters): Promise<number | null>;
277
+ update(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<number | null>;
180
278
  /**
181
279
  * Returns a single value with raw positional parameters.
182
280
  * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
@@ -184,11 +282,12 @@ export declare class MySQL {
184
282
  *
185
283
  * @param query - SELECT query with ? placeholders only, returning one column
186
284
  * @param parameters - Array of values (undefined values are NOT converted to null)
285
+ * @param queryOptions - Query options to use for this query
187
286
  * @returns Value from first column of first row, or null
188
287
  * @example
189
288
  * const count = await db.rawScalar('SELECT COUNT(*) FROM users WHERE age > ?', [18]);
190
289
  */
191
- rawScalar<T = unknown>(query: string, parameters?: unknown[]): Promise<T | null>;
290
+ rawScalar<T = unknown>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
192
291
  /**
193
292
  * Returns a single value from the database.
194
293
  * Use for COUNT, SUM, or single column queries.
@@ -196,12 +295,13 @@ export declare class MySQL {
196
295
  *
197
296
  * @param query - SELECT query returning one column
198
297
  * @param parameters - Parameter values
298
+ * @param queryOptions - Query options to use for this query
199
299
  * @returns Value from first column of first row, or null
200
300
  * @example
201
301
  * const count = await db.scalar('SELECT COUNT(*) FROM users');
202
302
  * const name = await db.scalar('SELECT name FROM users WHERE id = :id', { id: 1 });
203
303
  */
204
- scalar<T = unknown>(query: string, parameters?: QueryParameters): Promise<T | null>;
304
+ scalar<T = unknown>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
205
305
  /**
206
306
  * Returns a single row with raw positional parameters.
207
307
  * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
@@ -209,11 +309,12 @@ export declare class MySQL {
209
309
  *
210
310
  * @param query - SELECT query with ? placeholders only
211
311
  * @param parameters - Array of values (undefined values are NOT converted to null)
312
+ * @param queryOptions - Query options to use for this query
212
313
  * @returns Single row or null
213
314
  * @example
214
315
  * const user = await db.rawSingle('SELECT * FROM users WHERE id = ?', [1]);
215
316
  */
216
- rawSingle<T = RowDataPacket>(query: string, parameters?: unknown[]): Promise<T | null>;
317
+ rawSingle<T = RowDataPacket>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
217
318
  /**
218
319
  * Returns a single row from the database.
219
320
  * Returns null if no rows match.
@@ -221,6 +322,7 @@ export declare class MySQL {
221
322
  *
222
323
  * @param query - SELECT query with :name or ? placeholders
223
324
  * @param parameters - Parameter values
325
+ * @param queryOptions - Query options to use for this query
224
326
  * @returns Single row or null
225
327
  * @example
226
328
  * const user = await db.single('SELECT * FROM users WHERE id = :id', { id: 1 });
@@ -228,7 +330,7 @@ export declare class MySQL {
228
330
  * console.log(user.name);
229
331
  * }
230
332
  */
231
- single<T = RowDataPacket>(query: string, parameters?: QueryParameters): Promise<T | null>;
333
+ single<T = RowDataPacket>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
232
334
  /**
233
335
  * Executes multiple queries as an atomic transaction.
234
336
  * All changes are rolled back if any query fails.
@@ -277,7 +379,7 @@ export declare class MySQL {
277
379
  */
278
380
  getConnection(): Promise<PoolConnection>;
279
381
  /**
280
- * Closes all connections in the pool.
382
+ * Closes all connections in the pool and SSH tunnel if active.
281
383
  * Call when shutting down the application.
282
384
  *
283
385
  * @throws {Error} If pool fails to close connections
@@ -1 +1 @@
1
- {"version":3,"file":"MySQL.d.ts","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MySQL.d.ts","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"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"}