@pma-network/sql 1.0.9 → 1.2.0

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
- import type { Pool, PoolConnection, RowDataPacket } from 'mysql2/promise';
2
- import type { BatchQuery, ConnectionConfig, QueryParameters, TransactionCallback, TransactionResult } from './types.js';
1
+ import type { Pool, PoolConnection, RowDataPacket } from "mysql2/promise";
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;
@@ -58,7 +150,8 @@ export declare class MySQL {
58
150
  private normalizeParameters;
59
151
  private setupConvarListeners;
60
152
  private scheduleResourceTick;
61
- private executeWithTiming;
153
+ private isTimeoutError;
154
+ private executePoolMethod;
62
155
  private exportMetric;
63
156
  private replaceAtSymbols;
64
157
  /**
@@ -86,7 +179,7 @@ export declare class MySQL {
86
179
  * @example
87
180
  * const result = await db.rawExecute('SELECT * FROM users WHERE uid = ?', [1]);
88
181
  */
89
- rawExecute<T = unknown>(query: string, parameters?: unknown[]): Promise<T | null>;
182
+ rawExecute<T = unknown>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
90
183
  /**
91
184
  * Executes a SQL query and returns the raw results.
92
185
  * Supports SELECT, INSERT, UPDATE, DELETE, and other SQL statements.
@@ -94,11 +187,12 @@ export declare class MySQL {
94
187
  *
95
188
  * @param query - SQL query with :name or ? placeholders
96
189
  * @param parameters - Parameter values as object or array
190
+ * @param queryOptions - Query options to use for this query
97
191
  * @returns Query result
98
192
  * @example
99
193
  * const result = await db.execute('SELECT * FROM users WHERE uid = :uid', { uid: 1 });
100
194
  */
101
- execute<T = unknown>(query: string, parameters?: QueryParameters): Promise<T | null>;
195
+ execute<T = unknown>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
102
196
  /**
103
197
  * Executes a SELECT query with raw positional parameters.
104
198
  * 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 +200,12 @@ export declare class MySQL {
106
200
  *
107
201
  * @param query - SELECT query with ? placeholders only
108
202
  * @param parameters - Array of values (undefined values are NOT converted to null)
203
+ * @param queryOptions - Query options to use for this query
109
204
  * @returns Array of rows
110
205
  * @example
111
206
  * const users = await db.rawQuery('SELECT * FROM users WHERE job_name = ?', ['police']);
112
207
  */
113
- rawQuery<T = RowDataPacket[]>(query: string, parameters?: unknown[]): Promise<T | null>;
208
+ rawQuery<T = RowDataPacket[]>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
114
209
  /**
115
210
  * Executes a SELECT query and returns rows.
116
211
  * Use for queries returning multiple rows.
@@ -122,7 +217,7 @@ export declare class MySQL {
122
217
  * @example
123
218
  * const users = await db.query('SELECT * FROM users WHERE job_name = :job', { job: 'police' });
124
219
  */
125
- query<T = RowDataPacket[]>(query: string, parameters?: QueryParameters): Promise<T | null>;
220
+ query<T = RowDataPacket[]>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
126
221
  /**
127
222
  * Inserts a row with raw positional parameters.
128
223
  * 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 +225,12 @@ export declare class MySQL {
130
225
  *
131
226
  * @param query - INSERT query with ? placeholders only
132
227
  * @param parameters - Array of values (undefined values are NOT converted to null)
228
+ * @param queryOptions - Query options to use for this query
133
229
  * @returns Insert ID or null on error
134
230
  * @example
135
231
  * 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
232
  */
137
- rawInsert(query: string, parameters?: unknown[]): Promise<number | null>;
233
+ rawInsert(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<number | null>;
138
234
  /**
139
235
  * Inserts a row into the database.
140
236
  * Returns the auto-generated ID.
@@ -142,6 +238,7 @@ export declare class MySQL {
142
238
  *
143
239
  * @param query - INSERT query with :name or ? placeholders
144
240
  * @param parameters - Values to insert
241
+ * @param queryOptions - Query options to use for this query
145
242
  * @returns Insert ID or null on error
146
243
  * @example
147
244
  * const insertId = await db.insert(
@@ -149,7 +246,7 @@ export declare class MySQL {
149
246
  * { identifier_id: 1, char_data_id: 1, first_name: 'John', last_name: 'Doe', inventory_id: 1 }
150
247
  * );
151
248
  */
152
- insert(query: string, parameters?: QueryParameters): Promise<number | null>;
249
+ insert(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<number | null>;
153
250
  /**
154
251
  * Updates rows with raw positional parameters.
155
252
  * 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 +254,12 @@ export declare class MySQL {
157
254
  *
158
255
  * @param query - UPDATE query with ? placeholders only
159
256
  * @param parameters - Array of values (undefined values are NOT converted to null)
257
+ * @param queryOptions - Query options to use for this query
160
258
  * @returns Number of affected rows or null on error
161
259
  * @example
162
260
  * const affectedRows = await db.rawUpdate('UPDATE users SET job_name = ?, job_rank = ? WHERE uid = ?', ['police', 1, 123]);
163
261
  */
164
- rawUpdate(query: string, parameters?: unknown[]): Promise<number | null>;
262
+ rawUpdate(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<number | null>;
165
263
  /**
166
264
  * Updates rows in the database.
167
265
  * Returns the number of affected rows.
@@ -169,6 +267,7 @@ export declare class MySQL {
169
267
  *
170
268
  * @param query - UPDATE query with :name or ? placeholders
171
269
  * @param parameters - Values to update
270
+ * @param queryOptions - Query options to use for this query
172
271
  * @returns Number of affected rows or null on error
173
272
  * @example
174
273
  * const affectedRows = await db.update(
@@ -176,7 +275,7 @@ export declare class MySQL {
176
275
  * { job: 'police', rank: 1, uid: 123 }
177
276
  * );
178
277
  */
179
- update(query: string, parameters?: QueryParameters): Promise<number | null>;
278
+ update(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<number | null>;
180
279
  /**
181
280
  * Returns a single value with raw positional parameters.
182
281
  * 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 +283,12 @@ export declare class MySQL {
184
283
  *
185
284
  * @param query - SELECT query with ? placeholders only, returning one column
186
285
  * @param parameters - Array of values (undefined values are NOT converted to null)
286
+ * @param queryOptions - Query options to use for this query
187
287
  * @returns Value from first column of first row, or null
188
288
  * @example
189
289
  * const count = await db.rawScalar('SELECT COUNT(*) FROM users WHERE age > ?', [18]);
190
290
  */
191
- rawScalar<T = unknown>(query: string, parameters?: unknown[]): Promise<T | null>;
291
+ rawScalar<T = unknown>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
192
292
  /**
193
293
  * Returns a single value from the database.
194
294
  * Use for COUNT, SUM, or single column queries.
@@ -196,12 +296,13 @@ export declare class MySQL {
196
296
  *
197
297
  * @param query - SELECT query returning one column
198
298
  * @param parameters - Parameter values
299
+ * @param queryOptions - Query options to use for this query
199
300
  * @returns Value from first column of first row, or null
200
301
  * @example
201
302
  * const count = await db.scalar('SELECT COUNT(*) FROM users');
202
303
  * const name = await db.scalar('SELECT name FROM users WHERE id = :id', { id: 1 });
203
304
  */
204
- scalar<T = unknown>(query: string, parameters?: QueryParameters): Promise<T | null>;
305
+ scalar<T = unknown>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
205
306
  /**
206
307
  * Returns a single row with raw positional parameters.
207
308
  * 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 +310,12 @@ export declare class MySQL {
209
310
  *
210
311
  * @param query - SELECT query with ? placeholders only
211
312
  * @param parameters - Array of values (undefined values are NOT converted to null)
313
+ * @param queryOptions - Query options to use for this query
212
314
  * @returns Single row or null
213
315
  * @example
214
316
  * const user = await db.rawSingle('SELECT * FROM users WHERE id = ?', [1]);
215
317
  */
216
- rawSingle<T = RowDataPacket>(query: string, parameters?: unknown[]): Promise<T | null>;
318
+ rawSingle<T = RowDataPacket>(query: string, parameters?: unknown[], queryOptions?: QueryOptions): Promise<T | null>;
217
319
  /**
218
320
  * Returns a single row from the database.
219
321
  * Returns null if no rows match.
@@ -221,6 +323,7 @@ export declare class MySQL {
221
323
  *
222
324
  * @param query - SELECT query with :name or ? placeholders
223
325
  * @param parameters - Parameter values
326
+ * @param queryOptions - Query options to use for this query
224
327
  * @returns Single row or null
225
328
  * @example
226
329
  * const user = await db.single('SELECT * FROM users WHERE id = :id', { id: 1 });
@@ -228,7 +331,7 @@ export declare class MySQL {
228
331
  * console.log(user.name);
229
332
  * }
230
333
  */
231
- single<T = RowDataPacket>(query: string, parameters?: QueryParameters): Promise<T | null>;
334
+ single<T = RowDataPacket>(query: string, parameters?: QueryParameters, queryOptions?: QueryOptions): Promise<T | null>;
232
335
  /**
233
336
  * Executes multiple queries as an atomic transaction.
234
337
  * All changes are rolled back if any query fails.
@@ -277,7 +380,7 @@ export declare class MySQL {
277
380
  */
278
381
  getConnection(): Promise<PoolConnection>;
279
382
  /**
280
- * Closes all connections in the pool.
383
+ * Closes all connections in the pool and SSH tunnel if active.
281
384
  * Call when shutting down the application.
282
385
  *
283
386
  * @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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"}