@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.
@@ -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
@@ -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
+ }