@powersync/service-core 0.0.0-dev-20250108084515 → 0.0.0-dev-20250116115804
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/CHANGELOG.md +38 -10
- package/dist/auth/RemoteJWKSCollector.d.ts +6 -7
- package/dist/auth/RemoteJWKSCollector.js +9 -26
- package/dist/auth/RemoteJWKSCollector.js.map +1 -1
- package/dist/storage/BucketStorage.d.ts +2 -2
- package/dist/storage/BucketStorage.js.map +1 -1
- package/dist/util/config/compound-config-collector.js +17 -4
- package/dist/util/config/compound-config-collector.js.map +1 -1
- package/dist/util/config/types.d.ts +0 -3
- package/dist/util/utils.d.ts +4 -0
- package/dist/util/utils.js +29 -0
- package/dist/util/utils.js.map +1 -1
- package/package.json +5 -5
- package/src/auth/RemoteJWKSCollector.ts +14 -31
- package/src/storage/BucketStorage.ts +6 -2
- package/src/util/config/compound-config-collector.ts +19 -9
- package/src/util/config/types.ts +0 -3
- package/src/util/utils.ts +26 -0
- package/test/src/auth.test.ts +20 -5
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,22 +1,50 @@
|
|
|
1
1
|
# @powersync/service-core
|
|
2
2
|
|
|
3
|
-
## 0.0.0-dev-
|
|
3
|
+
## 0.0.0-dev-20250116115804
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
-
-
|
|
7
|
+
- b07189d: Support IPv6 for JWKS URI.
|
|
8
|
+
- b07189d: Allow limiting IP ranges of outgoing connections
|
|
8
9
|
|
|
9
10
|
### Patch Changes
|
|
10
11
|
|
|
11
|
-
-
|
|
12
|
+
- Updated dependencies [b07189d]
|
|
13
|
+
- Updated dependencies [b07189d]
|
|
14
|
+
- @powersync/service-types@0.0.0-dev-20250116115804
|
|
15
|
+
- @powersync/lib-services-framework@0.0.0-dev-20250116115804
|
|
16
|
+
- @powersync/service-rsocket-router@0.0.0-dev-20250116115804
|
|
17
|
+
|
|
18
|
+
## 0.15.0
|
|
19
|
+
|
|
20
|
+
### Minor Changes
|
|
21
|
+
|
|
22
|
+
- 9d9ff08: Updated BucketStorageFactory to use AsyncDisposable
|
|
23
|
+
- 9d9ff08: Initial release of Postgres bucket storage.
|
|
24
|
+
|
|
25
|
+
### Patch Changes
|
|
26
|
+
|
|
27
|
+
- Updated dependencies [9d9ff08]
|
|
28
|
+
- @powersync/lib-services-framework@0.4.0
|
|
29
|
+
- @powersync/service-rsocket-router@0.0.16
|
|
30
|
+
|
|
31
|
+
## 0.14.0
|
|
32
|
+
|
|
33
|
+
### Minor Changes
|
|
34
|
+
|
|
35
|
+
- fea550f: Moved MongoDB sync bucket storage implementation to the MongoDB module.
|
|
36
|
+
|
|
37
|
+
### Patch Changes
|
|
38
|
+
|
|
39
|
+
- fea550f: Updated ts-codec to 1.3.0 for better decode error responses
|
|
12
40
|
- 48320b5: MongoDB: Fix replication of undefined values causing missing documents
|
|
13
|
-
- Updated dependencies [
|
|
14
|
-
- Updated dependencies [
|
|
15
|
-
- Updated dependencies [
|
|
16
|
-
- @powersync/lib-services-framework@0.
|
|
17
|
-
- @powersync/service-sync-rules@0.
|
|
18
|
-
- @powersync/service-types@0.
|
|
19
|
-
- @powersync/service-rsocket-router@0.0.
|
|
41
|
+
- Updated dependencies [fea550f]
|
|
42
|
+
- Updated dependencies [fea550f]
|
|
43
|
+
- Updated dependencies [fea550f]
|
|
44
|
+
- @powersync/lib-services-framework@0.3.0
|
|
45
|
+
- @powersync/service-sync-rules@0.23.1
|
|
46
|
+
- @powersync/service-types@0.7.0
|
|
47
|
+
- @powersync/service-rsocket-router@0.0.15
|
|
20
48
|
|
|
21
49
|
## 0.13.0
|
|
22
50
|
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import * as https from 'https';
|
|
2
1
|
import * as http from 'http';
|
|
2
|
+
import * as https from 'https';
|
|
3
|
+
import { LookupOptions } from '@powersync/lib-services-framework';
|
|
3
4
|
import { KeyCollector, KeyResult } from './KeyCollector.js';
|
|
4
5
|
export type RemoteJWKSCollectorOptions = {
|
|
5
|
-
|
|
6
|
-
* Blocks IP Ranges from the BLOCKED_IP_RANGES array
|
|
7
|
-
*/
|
|
8
|
-
block_local_ip?: boolean;
|
|
6
|
+
lookupOptions?: LookupOptions;
|
|
9
7
|
};
|
|
10
8
|
/**
|
|
11
9
|
* Set of keys fetched from JWKS URI.
|
|
@@ -13,10 +11,11 @@ export type RemoteJWKSCollectorOptions = {
|
|
|
13
11
|
export declare class RemoteJWKSCollector implements KeyCollector {
|
|
14
12
|
protected options?: RemoteJWKSCollectorOptions | undefined;
|
|
15
13
|
private url;
|
|
14
|
+
private agent;
|
|
16
15
|
constructor(url: string, options?: RemoteJWKSCollectorOptions | undefined);
|
|
17
16
|
getKeys(): Promise<KeyResult>;
|
|
18
17
|
/**
|
|
19
|
-
*
|
|
18
|
+
* Agent that uses a custom lookup function.
|
|
20
19
|
*/
|
|
21
|
-
resolveAgent():
|
|
20
|
+
resolveAgent(): http.Agent | https.Agent;
|
|
22
21
|
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import * as https from 'https';
|
|
2
1
|
import * as http from 'http';
|
|
3
|
-
import * as
|
|
4
|
-
import ip from 'ipaddr.js';
|
|
2
|
+
import * as https from 'https';
|
|
5
3
|
import * as jose from 'jose';
|
|
6
|
-
import * as net from 'net';
|
|
7
4
|
import fetch from 'node-fetch';
|
|
5
|
+
import { makeHostnameLookupFunction } from '@powersync/lib-services-framework';
|
|
8
6
|
import { KeySpec } from './KeySpec.js';
|
|
9
7
|
/**
|
|
10
8
|
* Set of keys fetched from JWKS URI.
|
|
@@ -23,6 +21,7 @@ export class RemoteJWKSCollector {
|
|
|
23
21
|
if (this.url.protocol != 'https:' && this.url.protocol != 'http:') {
|
|
24
22
|
throw new Error(`Only http(s) is supported for jwks_uri, got: ${url}`);
|
|
25
23
|
}
|
|
24
|
+
this.agent = this.resolveAgent();
|
|
26
25
|
}
|
|
27
26
|
async getKeys() {
|
|
28
27
|
const abortController = new AbortController();
|
|
@@ -35,7 +34,7 @@ export class RemoteJWKSCollector {
|
|
|
35
34
|
Accept: 'application/json'
|
|
36
35
|
},
|
|
37
36
|
signal: abortController.signal,
|
|
38
|
-
agent:
|
|
37
|
+
agent: this.agent
|
|
39
38
|
});
|
|
40
39
|
if (!res.ok) {
|
|
41
40
|
throw new jose.errors.JWKSInvalid(`JWKS request failed with ${res.statusText}`);
|
|
@@ -70,29 +69,13 @@ export class RemoteJWKSCollector {
|
|
|
70
69
|
return { keys: keys, errors: [] };
|
|
71
70
|
}
|
|
72
71
|
/**
|
|
73
|
-
*
|
|
72
|
+
* Agent that uses a custom lookup function.
|
|
74
73
|
*/
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
if (net.isIPv6(hostname)) {
|
|
79
|
-
throw new Error('IPv6 not supported yet');
|
|
80
|
-
}
|
|
81
|
-
else if (net.isIPv4(hostname)) {
|
|
82
|
-
// All good
|
|
83
|
-
resolved_ip = hostname;
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
resolved_ip = (await dns.resolve4(hostname))[0];
|
|
87
|
-
}
|
|
88
|
-
const parsed = ip.parse(resolved_ip);
|
|
89
|
-
if (parsed.kind() != 'ipv4' || (this.options?.block_local_ip && parsed.range() !== 'unicast')) {
|
|
90
|
-
// Do not connect to any reserved IPs, including loopback and private ranges
|
|
91
|
-
throw new Error(`IPs in this range are not supported: ${resolved_ip}`);
|
|
92
|
-
}
|
|
74
|
+
resolveAgent() {
|
|
75
|
+
const lookupOptions = this.options?.lookupOptions ?? { reject_ip_ranges: [] };
|
|
76
|
+
const lookup = makeHostnameLookupFunction(this.url.hostname, lookupOptions);
|
|
93
77
|
const options = {
|
|
94
|
-
|
|
95
|
-
host: resolved_ip
|
|
78
|
+
lookup
|
|
96
79
|
};
|
|
97
80
|
switch (this.url.protocol) {
|
|
98
81
|
case 'http:':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteJWKSCollector.js","sourceRoot":"","sources":["../../src/auth/RemoteJWKSCollector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"RemoteJWKSCollector.js","sourceRoot":"","sources":["../../src/auth/RemoteJWKSCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DisposableListener, DisposableObserverClient } from '@powersync/lib-services-framework';
|
|
1
|
+
import { AsyncDisposableObserverClient, DisposableListener, DisposableObserverClient } from '@powersync/lib-services-framework';
|
|
2
2
|
import { EvaluatedParameters, EvaluatedRow, SqlSyncRules, SqliteJsonRow, SqliteJsonValue, SqliteRow, ToastableSqliteRow } from '@powersync/service-sync-rules';
|
|
3
3
|
import { BSON } from 'bson';
|
|
4
4
|
import * as util from '../util/util-index.js';
|
|
@@ -44,7 +44,7 @@ export interface BucketStorageFactoryListener extends DisposableListener {
|
|
|
44
44
|
syncStorageCreated: (storage: SyncRulesBucketStorage) => void;
|
|
45
45
|
replicationEvent: (event: ReplicationEventPayload) => void;
|
|
46
46
|
}
|
|
47
|
-
export interface BucketStorageFactory extends
|
|
47
|
+
export interface BucketStorageFactory extends AsyncDisposableObserverClient<BucketStorageFactoryListener> {
|
|
48
48
|
/**
|
|
49
49
|
* Update sync rules from configuration, if changed.
|
|
50
50
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BucketStorage.js","sourceRoot":"","sources":["../../src/storage/BucketStorage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BucketStorage.js","sourceRoot":"","sources":["../../src/storage/BucketStorage.ts"],"names":[],"mappings":"AA+BA,MAAM,CAAN,IAAY,aAyBX;AAzBD,WAAY,aAAa;IACvB;;;;;OAKG;IACH,0CAAyB,CAAA;IAEzB;;;;OAIG;IACH,kCAAiB,CAAA;IACjB;;;OAGG;IACH,8BAAa,CAAA;IACb;;;OAGG;IACH,0CAAyB,CAAA;AAC3B,CAAC,EAzBW,aAAa,KAAb,aAAa,QAyBxB;AAsKD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAgOlE,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;AACnB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AA4CD,MAAM,UAAU,UAAU,CAAC,MAA0B,EAAE,SAA6B;IAClF,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;YACtC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -53,8 +53,24 @@ export class CompoundConfigCollector {
|
|
|
53
53
|
if (typeof jwks_uris == 'string') {
|
|
54
54
|
jwks_uris = [jwks_uris];
|
|
55
55
|
}
|
|
56
|
+
let jwksLookup = {
|
|
57
|
+
reject_ip_ranges: []
|
|
58
|
+
};
|
|
59
|
+
const block_local_jwks = baseConfig.client_auth?.block_local_jwks;
|
|
60
|
+
if (block_local_jwks == true) {
|
|
61
|
+
jwksLookup = {
|
|
62
|
+
reject_ip_ranges: ['local'],
|
|
63
|
+
reject_ipv6: true
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else if (Array.isArray(block_local_jwks)) {
|
|
67
|
+
jwksLookup = {
|
|
68
|
+
reject_ip_ranges: block_local_jwks,
|
|
69
|
+
reject_ipv6: true
|
|
70
|
+
};
|
|
71
|
+
}
|
|
56
72
|
for (let uri of jwks_uris) {
|
|
57
|
-
collectors.add(new auth.CachedKeyCollector(new auth.RemoteJWKSCollector(uri, {
|
|
73
|
+
collectors.add(new auth.CachedKeyCollector(new auth.RemoteJWKSCollector(uri, { lookupOptions: jwksLookup })));
|
|
58
74
|
}
|
|
59
75
|
const baseDevKey = (baseConfig.client_auth?.jwks?.keys ?? []).find((key) => key.kid == POWERSYNC_DEV_KID);
|
|
60
76
|
let devKey;
|
|
@@ -74,9 +90,6 @@ export class CompoundConfigCollector {
|
|
|
74
90
|
api_tokens: baseConfig.api?.tokens ?? [],
|
|
75
91
|
dev: {
|
|
76
92
|
demo_auth: baseConfig.dev?.demo_auth ?? false,
|
|
77
|
-
demo_client: baseConfig.dev?.demo_client ?? false,
|
|
78
|
-
demo_password: baseConfig.dev?.demo_password,
|
|
79
|
-
crud_api: baseConfig.dev?.crud_api ?? false,
|
|
80
93
|
dev_key: devKey
|
|
81
94
|
},
|
|
82
95
|
port: baseConfig.port ?? 8080,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compound-config-collector.js","sourceRoot":"","sources":["../../../src/util/config/compound-config-collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"compound-config-collector.js","sourceRoot":"","sources":["../../../src/util/config/compound-config-collector.ts"],"names":[],"mappings":"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"}
|
package/dist/util/utils.d.ts
CHANGED
|
@@ -45,3 +45,7 @@ export declare function reduceBucket(operations: OplogEntry[]): OplogEntry[];
|
|
|
45
45
|
* From: https://github.com/davidmarkclements/flatstr/issues/8
|
|
46
46
|
*/
|
|
47
47
|
export declare function flatstr(s: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Estimate in-memory size of row.
|
|
50
|
+
*/
|
|
51
|
+
export declare function estimateRowSize(record: sync_rules.ToastableSqliteRow | undefined): number;
|
package/dist/util/utils.js
CHANGED
|
@@ -191,4 +191,33 @@ export function flatstr(s) {
|
|
|
191
191
|
function rowKey(entry) {
|
|
192
192
|
return `${entry.object_type}/${entry.object_id}/${entry.subkey}`;
|
|
193
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Estimate in-memory size of row.
|
|
196
|
+
*/
|
|
197
|
+
export function estimateRowSize(record) {
|
|
198
|
+
if (record == null) {
|
|
199
|
+
return 12;
|
|
200
|
+
}
|
|
201
|
+
let size = 0;
|
|
202
|
+
for (let [key, value] of Object.entries(record)) {
|
|
203
|
+
size += 12 + key.length;
|
|
204
|
+
// number | string | null | bigint | Uint8Array
|
|
205
|
+
if (value == null) {
|
|
206
|
+
size += 4;
|
|
207
|
+
}
|
|
208
|
+
else if (typeof value == 'number') {
|
|
209
|
+
size += 8;
|
|
210
|
+
}
|
|
211
|
+
else if (typeof value == 'bigint') {
|
|
212
|
+
size += 8;
|
|
213
|
+
}
|
|
214
|
+
else if (typeof value == 'string') {
|
|
215
|
+
size += value.length;
|
|
216
|
+
}
|
|
217
|
+
else if (value instanceof Uint8Array) {
|
|
218
|
+
size += value.byteLength;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return size;
|
|
222
|
+
}
|
|
194
223
|
//# sourceMappingURL=utils.js.map
|
package/dist/util/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/util/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/util/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "0.0.0-dev-
|
|
8
|
+
"version": "0.0.0-dev-20250116115804",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"license": "FSL-1.1-Apache-2.0",
|
|
11
11
|
"type": "module",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"uuid": "^9.0.1",
|
|
33
33
|
"winston": "^3.13.0",
|
|
34
34
|
"yaml": "^2.3.2",
|
|
35
|
-
"@powersync/lib-services-framework": "0.0.0-dev-
|
|
35
|
+
"@powersync/lib-services-framework": "0.0.0-dev-20250116115804",
|
|
36
36
|
"@powersync/service-jsonbig": "0.17.10",
|
|
37
|
-
"@powersync/service-rsocket-router": "0.0.0-dev-
|
|
38
|
-
"@powersync/service-sync-rules": "0.
|
|
39
|
-
"@powersync/service-types": "0.0.0-dev-
|
|
37
|
+
"@powersync/service-rsocket-router": "0.0.0-dev-20250116115804",
|
|
38
|
+
"@powersync/service-sync-rules": "0.23.1",
|
|
39
|
+
"@powersync/service-types": "0.0.0-dev-20250116115804"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/async": "^3.2.24",
|
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
import * as https from 'https';
|
|
2
1
|
import * as http from 'http';
|
|
3
|
-
import * as
|
|
4
|
-
import ip from 'ipaddr.js';
|
|
2
|
+
import * as https from 'https';
|
|
5
3
|
import * as jose from 'jose';
|
|
6
|
-
import * as net from 'net';
|
|
7
4
|
import fetch from 'node-fetch';
|
|
8
5
|
|
|
9
|
-
import {
|
|
6
|
+
import { LookupOptions, makeHostnameLookupFunction } from '@powersync/lib-services-framework';
|
|
10
7
|
import { KeyCollector, KeyResult } from './KeyCollector.js';
|
|
8
|
+
import { KeySpec } from './KeySpec.js';
|
|
11
9
|
|
|
12
10
|
export type RemoteJWKSCollectorOptions = {
|
|
13
|
-
|
|
14
|
-
* Blocks IP Ranges from the BLOCKED_IP_RANGES array
|
|
15
|
-
*/
|
|
16
|
-
block_local_ip?: boolean;
|
|
11
|
+
lookupOptions?: LookupOptions;
|
|
17
12
|
};
|
|
18
13
|
|
|
19
14
|
/**
|
|
@@ -21,6 +16,7 @@ export type RemoteJWKSCollectorOptions = {
|
|
|
21
16
|
*/
|
|
22
17
|
export class RemoteJWKSCollector implements KeyCollector {
|
|
23
18
|
private url: URL;
|
|
19
|
+
private agent: http.Agent;
|
|
24
20
|
|
|
25
21
|
constructor(
|
|
26
22
|
url: string,
|
|
@@ -37,6 +33,8 @@ export class RemoteJWKSCollector implements KeyCollector {
|
|
|
37
33
|
if (this.url.protocol != 'https:' && this.url.protocol != 'http:') {
|
|
38
34
|
throw new Error(`Only http(s) is supported for jwks_uri, got: ${url}`);
|
|
39
35
|
}
|
|
36
|
+
|
|
37
|
+
this.agent = this.resolveAgent();
|
|
40
38
|
}
|
|
41
39
|
|
|
42
40
|
async getKeys(): Promise<KeyResult> {
|
|
@@ -51,7 +49,7 @@ export class RemoteJWKSCollector implements KeyCollector {
|
|
|
51
49
|
Accept: 'application/json'
|
|
52
50
|
},
|
|
53
51
|
signal: abortController.signal,
|
|
54
|
-
agent:
|
|
52
|
+
agent: this.agent
|
|
55
53
|
});
|
|
56
54
|
|
|
57
55
|
if (!res.ok) {
|
|
@@ -97,29 +95,14 @@ export class RemoteJWKSCollector implements KeyCollector {
|
|
|
97
95
|
}
|
|
98
96
|
|
|
99
97
|
/**
|
|
100
|
-
*
|
|
98
|
+
* Agent that uses a custom lookup function.
|
|
101
99
|
*/
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
if (net.isIPv6(hostname)) {
|
|
106
|
-
throw new Error('IPv6 not supported yet');
|
|
107
|
-
} else if (net.isIPv4(hostname)) {
|
|
108
|
-
// All good
|
|
109
|
-
resolved_ip = hostname;
|
|
110
|
-
} else {
|
|
111
|
-
resolved_ip = (await dns.resolve4(hostname))[0];
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
const parsed = ip.parse(resolved_ip);
|
|
115
|
-
if (parsed.kind() != 'ipv4' || (this.options?.block_local_ip && parsed.range() !== 'unicast')) {
|
|
116
|
-
// Do not connect to any reserved IPs, including loopback and private ranges
|
|
117
|
-
throw new Error(`IPs in this range are not supported: ${resolved_ip}`);
|
|
118
|
-
}
|
|
100
|
+
resolveAgent(): http.Agent | https.Agent {
|
|
101
|
+
const lookupOptions = this.options?.lookupOptions ?? { reject_ip_ranges: [] };
|
|
102
|
+
const lookup = makeHostnameLookupFunction(this.url.hostname, lookupOptions);
|
|
119
103
|
|
|
120
|
-
const options = {
|
|
121
|
-
|
|
122
|
-
host: resolved_ip
|
|
104
|
+
const options: http.AgentOptions = {
|
|
105
|
+
lookup
|
|
123
106
|
};
|
|
124
107
|
|
|
125
108
|
switch (this.url.protocol) {
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
AsyncDisposableObserverClient,
|
|
3
|
+
DisposableListener,
|
|
4
|
+
DisposableObserverClient
|
|
5
|
+
} from '@powersync/lib-services-framework';
|
|
2
6
|
import {
|
|
3
7
|
EvaluatedParameters,
|
|
4
8
|
EvaluatedRow,
|
|
@@ -56,7 +60,7 @@ export interface BucketStorageFactoryListener extends DisposableListener {
|
|
|
56
60
|
replicationEvent: (event: ReplicationEventPayload) => void;
|
|
57
61
|
}
|
|
58
62
|
|
|
59
|
-
export interface BucketStorageFactory extends
|
|
63
|
+
export interface BucketStorageFactory extends AsyncDisposableObserverClient<BucketStorageFactoryListener> {
|
|
60
64
|
/**
|
|
61
65
|
* Update sync rules from configuration, if changed.
|
|
62
66
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logger } from '@powersync/lib-services-framework';
|
|
1
|
+
import { logger, LookupOptions } from '@powersync/lib-services-framework';
|
|
2
2
|
import { configFile } from '@powersync/service-types';
|
|
3
3
|
import * as auth from '../../auth/auth-index.js';
|
|
4
4
|
import { ConfigCollector } from './collectors/config-collector.js';
|
|
@@ -91,12 +91,25 @@ export class CompoundConfigCollector {
|
|
|
91
91
|
jwks_uris = [jwks_uris];
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
let jwksLookup: LookupOptions = {
|
|
95
|
+
reject_ip_ranges: []
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const block_local_jwks = baseConfig.client_auth?.block_local_jwks;
|
|
99
|
+
if (block_local_jwks == true) {
|
|
100
|
+
jwksLookup = {
|
|
101
|
+
reject_ip_ranges: ['local'],
|
|
102
|
+
reject_ipv6: true
|
|
103
|
+
};
|
|
104
|
+
} else if (Array.isArray(block_local_jwks)) {
|
|
105
|
+
jwksLookup = {
|
|
106
|
+
reject_ip_ranges: block_local_jwks,
|
|
107
|
+
reject_ipv6: true
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
94
111
|
for (let uri of jwks_uris) {
|
|
95
|
-
collectors.add(
|
|
96
|
-
new auth.CachedKeyCollector(
|
|
97
|
-
new auth.RemoteJWKSCollector(uri, { block_local_ip: !!baseConfig.client_auth?.block_local_jwks })
|
|
98
|
-
)
|
|
99
|
-
);
|
|
112
|
+
collectors.add(new auth.CachedKeyCollector(new auth.RemoteJWKSCollector(uri, { lookupOptions: jwksLookup })));
|
|
100
113
|
}
|
|
101
114
|
|
|
102
115
|
const baseDevKey = (baseConfig.client_auth?.jwks?.keys ?? []).find((key) => key.kid == POWERSYNC_DEV_KID);
|
|
@@ -121,9 +134,6 @@ export class CompoundConfigCollector {
|
|
|
121
134
|
api_tokens: baseConfig.api?.tokens ?? [],
|
|
122
135
|
dev: {
|
|
123
136
|
demo_auth: baseConfig.dev?.demo_auth ?? false,
|
|
124
|
-
demo_client: baseConfig.dev?.demo_client ?? false,
|
|
125
|
-
demo_password: baseConfig.dev?.demo_password,
|
|
126
|
-
crud_api: baseConfig.dev?.crud_api ?? false,
|
|
127
137
|
dev_key: devKey
|
|
128
138
|
},
|
|
129
139
|
port: baseConfig.port ?? 8080,
|
package/src/util/config/types.ts
CHANGED
package/src/util/utils.ts
CHANGED
|
@@ -222,3 +222,29 @@ export function flatstr(s: string) {
|
|
|
222
222
|
function rowKey(entry: OplogEntry) {
|
|
223
223
|
return `${entry.object_type}/${entry.object_id}/${entry.subkey}`;
|
|
224
224
|
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Estimate in-memory size of row.
|
|
228
|
+
*/
|
|
229
|
+
export function estimateRowSize(record: sync_rules.ToastableSqliteRow | undefined) {
|
|
230
|
+
if (record == null) {
|
|
231
|
+
return 12;
|
|
232
|
+
}
|
|
233
|
+
let size = 0;
|
|
234
|
+
for (let [key, value] of Object.entries(record)) {
|
|
235
|
+
size += 12 + key.length;
|
|
236
|
+
// number | string | null | bigint | Uint8Array
|
|
237
|
+
if (value == null) {
|
|
238
|
+
size += 4;
|
|
239
|
+
} else if (typeof value == 'number') {
|
|
240
|
+
size += 8;
|
|
241
|
+
} else if (typeof value == 'bigint') {
|
|
242
|
+
size += 8;
|
|
243
|
+
} else if (typeof value == 'string') {
|
|
244
|
+
size += value.length;
|
|
245
|
+
} else if (value instanceof Uint8Array) {
|
|
246
|
+
size += value.byteLength;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return size;
|
|
250
|
+
}
|
package/test/src/auth.test.ts
CHANGED
|
@@ -284,11 +284,23 @@ describe('JWT Auth', () => {
|
|
|
284
284
|
expect(errors).toEqual([]);
|
|
285
285
|
expect(keys.length).toBeGreaterThanOrEqual(1);
|
|
286
286
|
|
|
287
|
-
//
|
|
288
|
-
const invalid = new RemoteJWKSCollector('https://
|
|
289
|
-
|
|
287
|
+
// Domain names are resolved when retrieving keys
|
|
288
|
+
const invalid = new RemoteJWKSCollector('https://localhost/.well-known/jwks.json', {
|
|
289
|
+
lookupOptions: {
|
|
290
|
+
reject_ip_ranges: ['local']
|
|
291
|
+
}
|
|
290
292
|
});
|
|
291
293
|
expect(invalid.getKeys()).rejects.toThrow('IPs in this range are not supported');
|
|
294
|
+
|
|
295
|
+
// IPS throw an error immediately
|
|
296
|
+
expect(
|
|
297
|
+
() =>
|
|
298
|
+
new RemoteJWKSCollector('https://127.0.0.1/.well-known/jwks.json', {
|
|
299
|
+
lookupOptions: {
|
|
300
|
+
reject_ip_ranges: ['local']
|
|
301
|
+
}
|
|
302
|
+
})
|
|
303
|
+
).toThrowError('IPs in this range are not supported');
|
|
292
304
|
});
|
|
293
305
|
|
|
294
306
|
test('http not blocking local IPs', async () => {
|
|
@@ -301,10 +313,13 @@ describe('JWT Auth', () => {
|
|
|
301
313
|
expect(errors).toEqual([]);
|
|
302
314
|
expect(keys.length).toBeGreaterThanOrEqual(1);
|
|
303
315
|
|
|
304
|
-
// The localhost hostname fails to resolve correctly on MacOS https://github.com/nodejs/help/issues/2163
|
|
305
316
|
const invalid = new RemoteJWKSCollector('https://127.0.0.1/.well-known/jwks.json');
|
|
306
317
|
// Should try and fetch
|
|
307
|
-
expect(invalid.getKeys()).rejects.toThrow(
|
|
318
|
+
expect(invalid.getKeys()).rejects.toThrow();
|
|
319
|
+
|
|
320
|
+
const invalid2 = new RemoteJWKSCollector('https://localhost/.well-known/jwks.json');
|
|
321
|
+
// Should try and fetch
|
|
322
|
+
expect(invalid2.getKeys()).rejects.toThrow();
|
|
308
323
|
});
|
|
309
324
|
|
|
310
325
|
test('caching', async () => {
|