@powersync/service-jpgwire 0.17.10
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/LICENSE +67 -0
- package/README.md +9 -0
- package/ca/aws-global.pem +2876 -0
- package/ca/azure.pem +128 -0
- package/ca/isrgrootx1.pem +31 -0
- package/ca/supabase-2021.pem +23 -0
- package/dist/certs.d.ts +1 -0
- package/dist/certs.js +15 -0
- package/dist/certs.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics.d.ts +8 -0
- package/dist/metrics.js +11 -0
- package/dist/metrics.js.map +1 -0
- package/dist/pgwire.d.ts +4 -0
- package/dist/pgwire.js +10 -0
- package/dist/pgwire.js.map +1 -0
- package/dist/pgwire_node.d.ts +1 -0
- package/dist/pgwire_node.js +164 -0
- package/dist/pgwire_node.js.map +1 -0
- package/dist/pgwire_types.d.ts +30 -0
- package/dist/pgwire_types.js +256 -0
- package/dist/pgwire_types.js.map +1 -0
- package/dist/util.d.ts +75 -0
- package/dist/util.js +225 -0
- package/dist/util.js.map +1 -0
- package/package.json +25 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
// Adapted from https://github.com/kagis/pgwire/blob/0dc927f9f8990a903f238737326e53ba1c8d094f/mod.js#L2218
|
|
2
|
+
import { dateToSqlite, lsnMakeComparable, timestampToSqlite, timestamptzToSqlite } from './util.js';
|
|
3
|
+
import { JsonContainer } from '@powersync/service-jsonbig';
|
|
4
|
+
export class PgType {
|
|
5
|
+
static decode(text, typeOid) {
|
|
6
|
+
switch (typeOid // add line here when register new type
|
|
7
|
+
) {
|
|
8
|
+
case 25 /* text */:
|
|
9
|
+
case 2950 /* uuid */:
|
|
10
|
+
case 1043 /* varchar */:
|
|
11
|
+
return text;
|
|
12
|
+
case 16 /* bool */:
|
|
13
|
+
return text == 't';
|
|
14
|
+
case 17 /* bytea */:
|
|
15
|
+
return this._decodeBytea(text);
|
|
16
|
+
case 21 /* int2 */:
|
|
17
|
+
case 23 /* int4 */:
|
|
18
|
+
case 26 /* oid */:
|
|
19
|
+
case 20 /* int8 */:
|
|
20
|
+
return BigInt(text);
|
|
21
|
+
case 700 /* float4 */:
|
|
22
|
+
case 701 /* float8 */:
|
|
23
|
+
return Number(text);
|
|
24
|
+
case 1082 /* date */:
|
|
25
|
+
return dateToSqlite(text);
|
|
26
|
+
case 1114 /* timestamp */:
|
|
27
|
+
return timestampToSqlite(text);
|
|
28
|
+
case 1184 /* timestamptz */:
|
|
29
|
+
return timestamptzToSqlite(text);
|
|
30
|
+
case 114 /* json */:
|
|
31
|
+
case 3802 /* jsonb */:
|
|
32
|
+
// Don't parse the contents
|
|
33
|
+
return new JsonContainer(text);
|
|
34
|
+
case 3220 /* pg_lsn */:
|
|
35
|
+
return lsnMakeComparable(text);
|
|
36
|
+
}
|
|
37
|
+
const elemTypeid = this._elemTypeOid(typeOid);
|
|
38
|
+
if (elemTypeid) {
|
|
39
|
+
return this._decodeArray(text, elemTypeid);
|
|
40
|
+
}
|
|
41
|
+
return text; // unknown type
|
|
42
|
+
}
|
|
43
|
+
static _elemTypeOid(arrayTypeOid) {
|
|
44
|
+
// select 'case ' || typarray || ': return ' || oid || '; // ' || typname from pg_catalog.pg_type WHERE typearray != 0;
|
|
45
|
+
switch (arrayTypeOid // add line here when register new type
|
|
46
|
+
) {
|
|
47
|
+
case 1000:
|
|
48
|
+
return 16; // bool
|
|
49
|
+
case 1001:
|
|
50
|
+
return 17; // bytea
|
|
51
|
+
case 1002:
|
|
52
|
+
return 18; // char
|
|
53
|
+
case 1003:
|
|
54
|
+
return 19; // name
|
|
55
|
+
case 1016:
|
|
56
|
+
return 20; // int8
|
|
57
|
+
case 1005:
|
|
58
|
+
return 21; // int2
|
|
59
|
+
case 1006:
|
|
60
|
+
return 22; // int2vector
|
|
61
|
+
case 1007:
|
|
62
|
+
return 23; // int4
|
|
63
|
+
case 1008:
|
|
64
|
+
return 24; // regproc
|
|
65
|
+
case 1009:
|
|
66
|
+
return 25; // text
|
|
67
|
+
case 1028:
|
|
68
|
+
return 26; // oid
|
|
69
|
+
case 1010:
|
|
70
|
+
return 27; // tid
|
|
71
|
+
case 1011:
|
|
72
|
+
return 28; // xid
|
|
73
|
+
case 1012:
|
|
74
|
+
return 29; // cid
|
|
75
|
+
case 1013:
|
|
76
|
+
return 30; // oidvector
|
|
77
|
+
case 210:
|
|
78
|
+
return 71; // pg_type
|
|
79
|
+
case 270:
|
|
80
|
+
return 75; // pg_attribute
|
|
81
|
+
case 272:
|
|
82
|
+
return 81; // pg_proc
|
|
83
|
+
case 273:
|
|
84
|
+
return 83; // pg_class
|
|
85
|
+
case 199:
|
|
86
|
+
return 114; // json
|
|
87
|
+
case 143:
|
|
88
|
+
return 142; // xml
|
|
89
|
+
case 271:
|
|
90
|
+
return 5069; // xid8
|
|
91
|
+
case 1017:
|
|
92
|
+
return 600; // point
|
|
93
|
+
case 1018:
|
|
94
|
+
return 601; // lseg
|
|
95
|
+
case 1019:
|
|
96
|
+
return 602; // path
|
|
97
|
+
case 1020:
|
|
98
|
+
return 603; // box
|
|
99
|
+
case 1027:
|
|
100
|
+
return 604; // polygon
|
|
101
|
+
case 629:
|
|
102
|
+
return 628; // line
|
|
103
|
+
case 1021:
|
|
104
|
+
return 700; // float4
|
|
105
|
+
case 1022:
|
|
106
|
+
return 701; // float8
|
|
107
|
+
case 0:
|
|
108
|
+
return 705; // unknown
|
|
109
|
+
case 719:
|
|
110
|
+
return 718; // circle
|
|
111
|
+
case 791:
|
|
112
|
+
return 790; // money
|
|
113
|
+
case 1040:
|
|
114
|
+
return 829; // macaddr
|
|
115
|
+
case 1041:
|
|
116
|
+
return 869; // inet
|
|
117
|
+
case 651:
|
|
118
|
+
return 650; // cidr
|
|
119
|
+
case 775:
|
|
120
|
+
return 774; // macaddr8
|
|
121
|
+
case 1034:
|
|
122
|
+
return 1033; // aclitem
|
|
123
|
+
case 1014:
|
|
124
|
+
return 1042; // bpchar
|
|
125
|
+
case 1015:
|
|
126
|
+
return 1043; // varchar
|
|
127
|
+
case 1182:
|
|
128
|
+
return 1082; // date
|
|
129
|
+
case 1183:
|
|
130
|
+
return 1083; // time
|
|
131
|
+
case 1115:
|
|
132
|
+
return 1114; // timestamp
|
|
133
|
+
case 1185:
|
|
134
|
+
return 1184; // timestamptz
|
|
135
|
+
case 1187:
|
|
136
|
+
return 1186; // interval
|
|
137
|
+
case 1270:
|
|
138
|
+
return 1266; // timetz
|
|
139
|
+
case 1561:
|
|
140
|
+
return 1560; // bit
|
|
141
|
+
case 1563:
|
|
142
|
+
return 1562; // varbit
|
|
143
|
+
case 1231:
|
|
144
|
+
return 1700; // numeric
|
|
145
|
+
case 2201:
|
|
146
|
+
return 1790; // refcursor
|
|
147
|
+
case 2207:
|
|
148
|
+
return 2202; // regprocedure
|
|
149
|
+
case 2208:
|
|
150
|
+
return 2203; // regoper
|
|
151
|
+
case 2209:
|
|
152
|
+
return 2204; // regoperator
|
|
153
|
+
case 2210:
|
|
154
|
+
return 2205; // regclass
|
|
155
|
+
case 4192:
|
|
156
|
+
return 4191; // regcollation
|
|
157
|
+
case 2211:
|
|
158
|
+
return 2206; // regtype
|
|
159
|
+
case 4097:
|
|
160
|
+
return 4096; // regrole
|
|
161
|
+
case 4090:
|
|
162
|
+
return 4089; // regnamespace
|
|
163
|
+
case 2951:
|
|
164
|
+
return 2950; // uuid
|
|
165
|
+
case 3221:
|
|
166
|
+
return 3220; // pg_lsn
|
|
167
|
+
case 3643:
|
|
168
|
+
return 3614; // tsvector
|
|
169
|
+
case 3644:
|
|
170
|
+
return 3642; // gtsvector
|
|
171
|
+
case 3645:
|
|
172
|
+
return 3615; // tsquery
|
|
173
|
+
case 3735:
|
|
174
|
+
return 3734; // regconfig
|
|
175
|
+
case 3770:
|
|
176
|
+
return 3769; // regdictionary
|
|
177
|
+
case 3807:
|
|
178
|
+
return 3802; // jsonb
|
|
179
|
+
case 4073:
|
|
180
|
+
return 4072; // jsonpath
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
static _decodeArray(text, elemTypeOid) {
|
|
184
|
+
text = text.replace(/^\[.+=/, ''); // skip dimensions
|
|
185
|
+
let result;
|
|
186
|
+
for (let i = 0, inQuotes = false, elStart = 0, stack = []; i < text.length; i++) {
|
|
187
|
+
const ch = text.charCodeAt(i);
|
|
188
|
+
if (ch == 0x5c /*\*/) {
|
|
189
|
+
i++; // escape
|
|
190
|
+
}
|
|
191
|
+
else if (ch == 0x22 /*"*/) {
|
|
192
|
+
inQuotes = !inQuotes;
|
|
193
|
+
}
|
|
194
|
+
else if (inQuotes) {
|
|
195
|
+
}
|
|
196
|
+
else if (ch == 0x7b /*{*/) {
|
|
197
|
+
// continue
|
|
198
|
+
stack.unshift([]), (elStart = i + 1);
|
|
199
|
+
}
|
|
200
|
+
else if (ch == 0x7d /*}*/ || ch == 0x2c /*,*/) {
|
|
201
|
+
// TODO configurable delimiter
|
|
202
|
+
// TODO ensure .slice is cheap enough to do it unconditionally
|
|
203
|
+
const escaped = text.slice(elStart, i); // TODO trim ' \t\n\r\v\f'
|
|
204
|
+
if (result) {
|
|
205
|
+
stack[0].push(result);
|
|
206
|
+
}
|
|
207
|
+
else if (/^NULL$/i.test(escaped)) {
|
|
208
|
+
stack[0].push(null);
|
|
209
|
+
}
|
|
210
|
+
else if (escaped.length) {
|
|
211
|
+
const unescaped = escaped.replace(/^"|"$|(?<!\\)\\/g, '');
|
|
212
|
+
// TODO accept decodeFn as argument,
|
|
213
|
+
// extract parseArray logic out of decoder,
|
|
214
|
+
// do benchmark of static vs dynamic dispatch
|
|
215
|
+
const decoded = this.decode(unescaped, elemTypeOid);
|
|
216
|
+
stack[0].push(decoded);
|
|
217
|
+
}
|
|
218
|
+
result = ch == 0x7d /*}*/ && stack.shift();
|
|
219
|
+
elStart = i + 1; // TODO dry
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return result;
|
|
223
|
+
}
|
|
224
|
+
static _decodeBytea(text) {
|
|
225
|
+
// https://www.postgresql.org/docs/9.6/datatype-binary.html#AEN5830
|
|
226
|
+
if (text.startsWith('\\x')) {
|
|
227
|
+
const hex = text.slice(2); // TODO check hex.length is even ?
|
|
228
|
+
const bytes = Uint8Array.from(Buffer.from(hex, 'hex'));
|
|
229
|
+
return bytes;
|
|
230
|
+
}
|
|
231
|
+
// Adapted from original
|
|
232
|
+
throw new Error('Not supported');
|
|
233
|
+
}
|
|
234
|
+
static _encodeBytea(bytes) {
|
|
235
|
+
return '\\x' + Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* We need a high level of control over how values are decoded, to make sure there is no loss
|
|
240
|
+
* of precision in the process.
|
|
241
|
+
*/
|
|
242
|
+
export function decodeTuple(relation, tupleRaw) {
|
|
243
|
+
let result = {};
|
|
244
|
+
for (let columnName in tupleRaw) {
|
|
245
|
+
const rawval = tupleRaw[columnName];
|
|
246
|
+
const typeOid = relation._tupleDecoder._typeOids.get(columnName);
|
|
247
|
+
if (typeof rawval == 'string' && typeOid) {
|
|
248
|
+
result[columnName] = PgType.decode(rawval, typeOid);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
result[columnName] = rawval;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=pgwire_types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pgwire_types.js","sourceRoot":"","sources":["../src/pgwire_types.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { NormalizedPostgresConnection } from '@powersync/service-types';
|
|
3
|
+
import * as tls from 'tls';
|
|
4
|
+
import * as pgwire from './pgwire.js';
|
|
5
|
+
export interface PgWireConnectionOptions extends NormalizedPostgresConnection {
|
|
6
|
+
resolved_ip?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function clientTlsOptions(options: PgWireConnectionOptions): tls.ConnectionOptions;
|
|
9
|
+
export declare function tlsOptions(options: PgWireConnectionOptions): false | tls.ConnectionOptions;
|
|
10
|
+
export declare function connectPgWire(config: PgWireConnectionOptions, options?: {
|
|
11
|
+
type?: 'standard' | 'replication';
|
|
12
|
+
}): Promise<pgwire.PgConnection>;
|
|
13
|
+
export interface PgPoolOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Maximum number of open connections.
|
|
16
|
+
*
|
|
17
|
+
* Once this limit is reached, queries are queued.
|
|
18
|
+
*
|
|
19
|
+
* Defaults to 5.
|
|
20
|
+
*/
|
|
21
|
+
maxSize?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Idle timeout in ms before a connection is closed.
|
|
24
|
+
*/
|
|
25
|
+
idleTimeout?: number | undefined;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Open a postgres pool.
|
|
29
|
+
*
|
|
30
|
+
* The pool cannot be used for transactions, and cannot be used for logical replication.
|
|
31
|
+
*/
|
|
32
|
+
export declare function connectPgWirePool(config: PgWireConnectionOptions, options?: PgPoolOptions): pgwire.PgClient;
|
|
33
|
+
/**
|
|
34
|
+
* Hack: sslrootcert is passed through as-is to pgwire_node.
|
|
35
|
+
*
|
|
36
|
+
* We use that to pass in custom TLS options, without having to modify pgwire itself.
|
|
37
|
+
*/
|
|
38
|
+
export interface ExtendedPgwireOptions extends pgwire.PgConnectKnownOptions {
|
|
39
|
+
sslrootcert?: false | tls.ConnectionOptions;
|
|
40
|
+
}
|
|
41
|
+
export declare function lsnMakeComparable(text: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Convert a postgres timestamptz to a SQLite-compatible/normalized timestamp.
|
|
44
|
+
*
|
|
45
|
+
* We output in the format:
|
|
46
|
+
* YYYY-MM-DD HH:MM:SSZ
|
|
47
|
+
* YYYY-MM-DD HH:MM:SS.SSSZ
|
|
48
|
+
*
|
|
49
|
+
* Precision is preserved from the source string, with the exception of ".000".
|
|
50
|
+
*
|
|
51
|
+
* We have specific exceptions for -infinity and infinity.
|
|
52
|
+
*/
|
|
53
|
+
export declare function timestamptzToSqlite(source?: string): string | null;
|
|
54
|
+
/**
|
|
55
|
+
* For timestamp without timezone, we keep it mostly as-is.
|
|
56
|
+
*
|
|
57
|
+
* We make specific exceptions for 'infinity' and '-infinity'.
|
|
58
|
+
*
|
|
59
|
+
* https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-SPECIAL-VALUES
|
|
60
|
+
*/
|
|
61
|
+
export declare function timestampToSqlite(source?: string): string | null;
|
|
62
|
+
/**
|
|
63
|
+
* For date, we keep it mostly as-is.
|
|
64
|
+
*
|
|
65
|
+
* We make specific exceptions for 'infinity' and '-infinity'.
|
|
66
|
+
*
|
|
67
|
+
* https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-SPECIAL-VALUES
|
|
68
|
+
*/
|
|
69
|
+
export declare function dateToSqlite(source?: string): string | null;
|
|
70
|
+
/**
|
|
71
|
+
* PgResult rows are arrays of values.
|
|
72
|
+
*
|
|
73
|
+
* This converts it to objects.
|
|
74
|
+
*/
|
|
75
|
+
export declare function pgwireRows(rs: pgwire.PgResult): Record<string, any>[];
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { DEFAULT_CERTS } from './certs.js';
|
|
2
|
+
import * as pgwire from './pgwire.js';
|
|
3
|
+
import { PgType } from './pgwire_types.js';
|
|
4
|
+
export function clientTlsOptions(options) {
|
|
5
|
+
if (options.client_certificate && options.client_private_key) {
|
|
6
|
+
return {
|
|
7
|
+
cert: options.client_certificate,
|
|
8
|
+
key: options.client_private_key
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function tlsOptions(options) {
|
|
16
|
+
if (options.sslmode == 'disable') {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
else if (options.sslmode == 'verify-full') {
|
|
20
|
+
// Validate against default CA, or supplied CA.
|
|
21
|
+
// Also validate hostname.
|
|
22
|
+
return {
|
|
23
|
+
ca: options.cacert ?? DEFAULT_CERTS,
|
|
24
|
+
// hostname for TLS validation.
|
|
25
|
+
// This may be different from the host we're connecting to if we pre-resolved
|
|
26
|
+
// the IP.
|
|
27
|
+
host: options.hostname,
|
|
28
|
+
servername: options.hostname,
|
|
29
|
+
...clientTlsOptions(options)
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
else if (options.sslmode == 'verify-ca') {
|
|
33
|
+
if (options.cacert == null) {
|
|
34
|
+
throw new Error(`cacert required for verify-ca`);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
ca: options.cacert,
|
|
38
|
+
host: options.hostname,
|
|
39
|
+
servername: options.hostname,
|
|
40
|
+
// Disable hostname check
|
|
41
|
+
checkServerIdentity: () => undefined,
|
|
42
|
+
...clientTlsOptions(options)
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw new Error(`Unsupported sslmode: ${options.sslmode}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export async function connectPgWire(config, options) {
|
|
50
|
+
let connectionOptions = {
|
|
51
|
+
application_name: 'PowerSync',
|
|
52
|
+
// tlsOptions below contains the original hostname
|
|
53
|
+
hostname: config.resolved_ip ?? config.hostname,
|
|
54
|
+
port: config.port,
|
|
55
|
+
database: config.database,
|
|
56
|
+
user: config.username,
|
|
57
|
+
password: config.password
|
|
58
|
+
};
|
|
59
|
+
if (options?.type != 'standard') {
|
|
60
|
+
connectionOptions.replication = 'database';
|
|
61
|
+
}
|
|
62
|
+
if (config.sslmode != 'disable') {
|
|
63
|
+
connectionOptions.sslmode = 'require';
|
|
64
|
+
// HACK: Not standard pgwire options
|
|
65
|
+
// Just the easiest way to pass on our config to pgwire_node.js
|
|
66
|
+
connectionOptions.sslrootcert = tlsOptions(config);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
connectionOptions.sslmode = 'disable';
|
|
70
|
+
}
|
|
71
|
+
const connection = await pgwire.pgconnect(connectionOptions);
|
|
72
|
+
// HACK: Replace row decoding with our own implementation
|
|
73
|
+
connection._recvDataRow = _recvDataRow;
|
|
74
|
+
return connection;
|
|
75
|
+
}
|
|
76
|
+
function _recvDataRow(_message, row, batch) {
|
|
77
|
+
for (let i = 0; i < this._rowColumns.length; i++) {
|
|
78
|
+
const valbuf = row[i];
|
|
79
|
+
if (valbuf == null) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const { binary, typeOid } = this._rowColumns[i];
|
|
83
|
+
// TODO avoid this._clientTextDecoder.decode for bytea
|
|
84
|
+
row[i] = binary
|
|
85
|
+
? // do not valbuf.slice() because nodejs Buffer .slice does not copy
|
|
86
|
+
// TODO but we not going to receive Buffer here ?
|
|
87
|
+
Uint8Array.prototype.slice.call(valbuf)
|
|
88
|
+
: PgType.decode(this._rowTextDecoder.decode(valbuf), typeOid);
|
|
89
|
+
}
|
|
90
|
+
batch.rows.push(row);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Open a postgres pool.
|
|
94
|
+
*
|
|
95
|
+
* The pool cannot be used for transactions, and cannot be used for logical replication.
|
|
96
|
+
*/
|
|
97
|
+
export function connectPgWirePool(config, options) {
|
|
98
|
+
const idleTimeout = options?.idleTimeout;
|
|
99
|
+
const maxSize = options?.maxSize ?? 5;
|
|
100
|
+
let connectionOptions = {
|
|
101
|
+
application_name: 'PowerSync',
|
|
102
|
+
// tlsOptions below contains the original hostname
|
|
103
|
+
hostname: config.resolved_ip ?? config.hostname,
|
|
104
|
+
port: config.port,
|
|
105
|
+
database: config.database,
|
|
106
|
+
user: config.username,
|
|
107
|
+
password: config.password,
|
|
108
|
+
_poolSize: maxSize,
|
|
109
|
+
_poolIdleTimeout: idleTimeout
|
|
110
|
+
};
|
|
111
|
+
if (config.sslmode != 'disable') {
|
|
112
|
+
connectionOptions.sslmode = 'require';
|
|
113
|
+
// HACK: Not standard pgwire options
|
|
114
|
+
// Just the easiest way to pass on our config to pgwire_node.js
|
|
115
|
+
connectionOptions.sslrootcert = tlsOptions(config);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
connectionOptions.sslmode = 'disable';
|
|
119
|
+
}
|
|
120
|
+
const pool = pgwire.pgpool(connectionOptions);
|
|
121
|
+
const originalGetConnection = pool._getConnection;
|
|
122
|
+
pool._getConnection = function () {
|
|
123
|
+
const con = originalGetConnection.call(this);
|
|
124
|
+
// HACK: Replace row decoding with our own implementation
|
|
125
|
+
con._recvDataRow = _recvDataRow;
|
|
126
|
+
return con;
|
|
127
|
+
};
|
|
128
|
+
return pool;
|
|
129
|
+
}
|
|
130
|
+
export function lsnMakeComparable(text) {
|
|
131
|
+
const [h, l] = text.split('/');
|
|
132
|
+
return h.padStart(8, '0') + '/' + l.padStart(8, '0');
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Convert a postgres timestamptz to a SQLite-compatible/normalized timestamp.
|
|
136
|
+
*
|
|
137
|
+
* We output in the format:
|
|
138
|
+
* YYYY-MM-DD HH:MM:SSZ
|
|
139
|
+
* YYYY-MM-DD HH:MM:SS.SSSZ
|
|
140
|
+
*
|
|
141
|
+
* Precision is preserved from the source string, with the exception of ".000".
|
|
142
|
+
*
|
|
143
|
+
* We have specific exceptions for -infinity and infinity.
|
|
144
|
+
*/
|
|
145
|
+
export function timestamptzToSqlite(source) {
|
|
146
|
+
if (source == null) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
// Make compatible with SQLite
|
|
150
|
+
const match = /^([\d\-]+) ([\d:]+)(\.\d+)?([+-][\d:]+)$/.exec(source);
|
|
151
|
+
if (match == null) {
|
|
152
|
+
if (source == 'infinity') {
|
|
153
|
+
return '9999-12-31 23:59:59Z';
|
|
154
|
+
}
|
|
155
|
+
else if (source == '-infinity') {
|
|
156
|
+
return '0000-01-01 00:00:00Z';
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const [_, date, time, precision, timezone] = match;
|
|
163
|
+
const parsed = new Date(`${date} ${time}${timezone}`);
|
|
164
|
+
const text = parsed.toISOString().replace('T', ' ').replace('.000', '').replace('Z', '');
|
|
165
|
+
return `${text}${precision ?? ''}Z`;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* For timestamp without timezone, we keep it mostly as-is.
|
|
169
|
+
*
|
|
170
|
+
* We make specific exceptions for 'infinity' and '-infinity'.
|
|
171
|
+
*
|
|
172
|
+
* https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-SPECIAL-VALUES
|
|
173
|
+
*/
|
|
174
|
+
export function timestampToSqlite(source) {
|
|
175
|
+
if (source == null) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
if (source == 'infinity') {
|
|
179
|
+
return '9999-12-31 23:59:59';
|
|
180
|
+
}
|
|
181
|
+
else if (source == '-infinity') {
|
|
182
|
+
return '0000-01-01 00:00:00';
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
return source;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* For date, we keep it mostly as-is.
|
|
190
|
+
*
|
|
191
|
+
* We make specific exceptions for 'infinity' and '-infinity'.
|
|
192
|
+
*
|
|
193
|
+
* https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-SPECIAL-VALUES
|
|
194
|
+
*/
|
|
195
|
+
export function dateToSqlite(source) {
|
|
196
|
+
if (source == null) {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
if (source == 'infinity') {
|
|
200
|
+
return '9999-12-31';
|
|
201
|
+
}
|
|
202
|
+
else if (source == '-infinity') {
|
|
203
|
+
return '0000-01-01';
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
return source;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* PgResult rows are arrays of values.
|
|
211
|
+
*
|
|
212
|
+
* This converts it to objects.
|
|
213
|
+
*/
|
|
214
|
+
export function pgwireRows(rs) {
|
|
215
|
+
const columns = rs.columns;
|
|
216
|
+
return rs.rows.map((row) => {
|
|
217
|
+
let r = {};
|
|
218
|
+
for (let i = 0; i < columns.length; i++) {
|
|
219
|
+
const c = columns[i];
|
|
220
|
+
r[c.name] = row[i];
|
|
221
|
+
}
|
|
222
|
+
return r;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@powersync/service-jpgwire",
|
|
3
|
+
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
|
+
"types": "dist/index.d.ts",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"version": "0.17.10",
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"license": "FSL-1.1-Apache-2.0",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/**/*",
|
|
13
|
+
"ca/*.pem"
|
|
14
|
+
],
|
|
15
|
+
"type": "module",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"pgwire": "github:kagis/pgwire#f1cb95f9a0f42a612bb5a6b67bb2eb793fc5fc87",
|
|
18
|
+
"@powersync/service-types": "^0.0.2",
|
|
19
|
+
"@powersync/service-jsonbig": "^0.17.10"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"clean": "rm -r ./dist && tsc -b --clean",
|
|
23
|
+
"build": "tsc -b"
|
|
24
|
+
}
|
|
25
|
+
}
|