@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 +118 -16
- package/dist/MySQL.d.ts.map +1 -1
- package/dist/MySQL.js +530 -104
- package/dist/MySQL.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +74 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
package/dist/MySQL.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MySQL.d.ts","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MySQL.d.ts","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"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"}
|