@powersync/lib-services-framework 0.0.0-dev-20250108073049 → 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/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/ip/ip-index.d.ts +1 -0
- package/dist/ip/ip-index.js +2 -0
- package/dist/ip/ip-index.js.map +1 -0
- package/dist/ip/lookup.d.ts +37 -0
- package/dist/ip/lookup.js +105 -0
- package/dist/ip/lookup.js.map +1 -0
- package/dist/migrations/AbstractMigrationAgent.js +23 -2
- package/dist/migrations/AbstractMigrationAgent.js.map +1 -1
- package/dist/utils/DisposableObserver.d.ts +5 -1
- package/dist/utils/DisposableObserver.js.map +1 -1
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
|
@@ -20,3 +20,5 @@ export * from './system/LifeCycledSystem.js';
|
|
|
20
20
|
export * as system from './system/system-index.js';
|
|
21
21
|
export * from './utils/utils-index.js';
|
|
22
22
|
export * as utils from './utils/utils-index.js';
|
|
23
|
+
export * from './ip/ip-index.js';
|
|
24
|
+
export * as ip from './ip/ip-index.js';
|
package/dist/index.js
CHANGED
|
@@ -20,4 +20,6 @@ export * from './system/LifeCycledSystem.js';
|
|
|
20
20
|
export * as system from './system/system-index.js';
|
|
21
21
|
export * from './utils/utils-index.js';
|
|
22
22
|
export * as utils from './utils/utils-index.js';
|
|
23
|
+
export * from './ip/ip-index.js';
|
|
24
|
+
export * as ip from './ip/ip-index.js';
|
|
23
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAEjD,cAAc,gBAAgB,CAAC;AAE/B,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,oBAAoB,CAAC;AAEnC,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,cAAc,kCAAkC,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kCAAkC,CAAC;AAE/D,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,8BAA8B,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAEjD,cAAc,gBAAgB,CAAC;AAE/B,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,oBAAoB,CAAC;AAEnC,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,cAAc,kCAAkC,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kCAAkC,CAAC;AAE/D,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,8BAA8B,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lookup.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip-index.js","sourceRoot":"","sources":["../../src/ip/ip-index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as net from 'node:net';
|
|
2
|
+
import * as dns from 'node:dns';
|
|
3
|
+
export interface LookupOptions {
|
|
4
|
+
reject_ip_ranges: string[];
|
|
5
|
+
reject_ipv6?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Generate a custom DNS lookup function, that rejects specific IP ranges.
|
|
9
|
+
*
|
|
10
|
+
* If hostname is an IP, this synchronously validates it.
|
|
11
|
+
*
|
|
12
|
+
* @returns a function to use as the `lookup` option in `net.connect`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function makeHostnameLookupFunction(hostname: string, lookupOptions: LookupOptions): net.LookupFunction | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Generate a custom DNS lookup function, that rejects specific IP ranges.
|
|
17
|
+
*
|
|
18
|
+
* Note: Lookup functions are not used for IPs configured directly.
|
|
19
|
+
* For those, validate the IP directly using validateIpHostname().
|
|
20
|
+
*
|
|
21
|
+
* @param reject_ip_ranges IPv4 and/or IPv6 subnets to reject, or 'local' to reject any IP that isn't public unicast.
|
|
22
|
+
* @returns a function to use as the `lookup` option in `net.connect`, or undefined if no restrictions are applied.
|
|
23
|
+
*/
|
|
24
|
+
export declare function makeLookupFunction(lookupOptions: LookupOptions): net.LookupFunction | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Validate IPs synchronously.
|
|
27
|
+
*
|
|
28
|
+
* If the hostname is not an ip, this does nothing.
|
|
29
|
+
*
|
|
30
|
+
* @param hostname IP or DNS name
|
|
31
|
+
* @param options
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateIpHostname(hostname: string, options: LookupOptions): void;
|
|
34
|
+
/**
|
|
35
|
+
* Resolve IP, and check that it is in an allowed range.
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveIp(hostname: string, options: LookupOptions): Promise<dns.LookupAddress>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import * as net from 'node:net';
|
|
2
|
+
import * as dnsp from 'node:dns/promises';
|
|
3
|
+
import ip from 'ipaddr.js';
|
|
4
|
+
/**
|
|
5
|
+
* Generate a custom DNS lookup function, that rejects specific IP ranges.
|
|
6
|
+
*
|
|
7
|
+
* If hostname is an IP, this synchronously validates it.
|
|
8
|
+
*
|
|
9
|
+
* @returns a function to use as the `lookup` option in `net.connect`.
|
|
10
|
+
*/
|
|
11
|
+
export function makeHostnameLookupFunction(hostname, lookupOptions) {
|
|
12
|
+
validateIpHostname(hostname, lookupOptions);
|
|
13
|
+
return makeLookupFunction(lookupOptions);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generate a custom DNS lookup function, that rejects specific IP ranges.
|
|
17
|
+
*
|
|
18
|
+
* Note: Lookup functions are not used for IPs configured directly.
|
|
19
|
+
* For those, validate the IP directly using validateIpHostname().
|
|
20
|
+
*
|
|
21
|
+
* @param reject_ip_ranges IPv4 and/or IPv6 subnets to reject, or 'local' to reject any IP that isn't public unicast.
|
|
22
|
+
* @returns a function to use as the `lookup` option in `net.connect`, or undefined if no restrictions are applied.
|
|
23
|
+
*/
|
|
24
|
+
export function makeLookupFunction(lookupOptions) {
|
|
25
|
+
if (lookupOptions.reject_ip_ranges.length == 0 && !lookupOptions.reject_ipv6) {
|
|
26
|
+
// No restrictions - use the default behavior
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return (hostname, options, callback) => {
|
|
30
|
+
resolveIp(hostname, lookupOptions)
|
|
31
|
+
.then((resolvedAddress) => {
|
|
32
|
+
if (options.all) {
|
|
33
|
+
callback(null, [resolvedAddress]);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
callback(null, resolvedAddress.address, resolvedAddress.family);
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
.catch((err) => {
|
|
40
|
+
callback(err, undefined, undefined);
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validate IPs synchronously.
|
|
46
|
+
*
|
|
47
|
+
* If the hostname is not an ip, this does nothing.
|
|
48
|
+
*
|
|
49
|
+
* @param hostname IP or DNS name
|
|
50
|
+
* @param options
|
|
51
|
+
*/
|
|
52
|
+
export function validateIpHostname(hostname, options) {
|
|
53
|
+
const { reject_ip_ranges: reject_ranges } = options;
|
|
54
|
+
if (!ip.isValid(hostname)) {
|
|
55
|
+
// Treat as a DNS name.
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const parsed = ip.parse(hostname);
|
|
59
|
+
const rejectLocal = reject_ranges.includes('local');
|
|
60
|
+
const rejectSubnets = reject_ranges.filter((range) => range != 'local');
|
|
61
|
+
const reject = { blocked: (rejectSubnets ?? []).map((r) => ip.parseCIDR(r)) };
|
|
62
|
+
if (options.reject_ipv6 && parsed.kind() == 'ipv6') {
|
|
63
|
+
throw new Error('IPv6 not supported');
|
|
64
|
+
}
|
|
65
|
+
if (ip.subnetMatch(parsed, reject) == 'blocked') {
|
|
66
|
+
// Ranges explicitly blocked, e.g. private IPv6 ranges
|
|
67
|
+
throw new Error(`IPs in this range are not supported: ${hostname}`);
|
|
68
|
+
}
|
|
69
|
+
if (!rejectLocal) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (parsed.kind() == 'ipv4' && parsed.range() == 'unicast') {
|
|
73
|
+
// IPv4 - All good
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
else if (parsed.kind() == 'ipv6' && parsed.range() == 'unicast') {
|
|
77
|
+
// IPv6 - All good
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Do not connect to any reserved IPs, including loopback and private ranges
|
|
82
|
+
throw new Error(`IPs in this range are not supported: ${hostname}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Resolve IP, and check that it is in an allowed range.
|
|
87
|
+
*/
|
|
88
|
+
export async function resolveIp(hostname, options) {
|
|
89
|
+
let resolvedAddress;
|
|
90
|
+
if (net.isIPv4(hostname)) {
|
|
91
|
+
// Direct ipv4 - all good so far
|
|
92
|
+
resolvedAddress = { address: hostname, family: 4 };
|
|
93
|
+
}
|
|
94
|
+
else if (net.isIPv6(hostname) || net.isIPv4(hostname)) {
|
|
95
|
+
// Direct ipv6 - all good so far
|
|
96
|
+
resolvedAddress = { address: hostname, family: 6 };
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// DNS name - resolve it
|
|
100
|
+
resolvedAddress = await dnsp.lookup(hostname);
|
|
101
|
+
}
|
|
102
|
+
validateIpHostname(resolvedAddress.address, options);
|
|
103
|
+
return resolvedAddress;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/ip/lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,14 +67,35 @@ export class AbstractMigrationAgent {
|
|
|
67
67
|
let index = 0;
|
|
68
68
|
if (params.state) {
|
|
69
69
|
// Find the index of the last run
|
|
70
|
+
const { last_run, log } = params.state;
|
|
70
71
|
index = migrations.findIndex((migration) => {
|
|
71
72
|
return migration.name === params.state.last_run;
|
|
72
73
|
});
|
|
73
74
|
if (index === -1) {
|
|
74
75
|
throw new Error(`The last run migration ${params.state?.last_run} was not found in the given set of migrations`);
|
|
75
76
|
}
|
|
76
|
-
//
|
|
77
|
-
|
|
77
|
+
// Get the last log entry for the last run migration
|
|
78
|
+
// This should technically be the last (sorted ascending) log entry.
|
|
79
|
+
// Sorting in descending order
|
|
80
|
+
const lastLogEntry = log
|
|
81
|
+
.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime())
|
|
82
|
+
.find((log) => log.name == last_run);
|
|
83
|
+
// There should be a log entry for this
|
|
84
|
+
if (!lastLogEntry) {
|
|
85
|
+
throw new Error(`Could not find last migration log entry for ${last_run}`);
|
|
86
|
+
}
|
|
87
|
+
// If we are migrating up:
|
|
88
|
+
// If the last run was an up migration:
|
|
89
|
+
// Then we want to start at the next migration index
|
|
90
|
+
// If after a previous Down migration
|
|
91
|
+
// Then we need to start at the current migration index
|
|
92
|
+
// If we are migrating down:
|
|
93
|
+
// If the previous migration was a down migration
|
|
94
|
+
// Then we need to start at the next index
|
|
95
|
+
// If the previous migration was an up migration
|
|
96
|
+
// Then we want to include the last run (up) migration
|
|
97
|
+
if ((params.direction === defs.Direction.Up && lastLogEntry.direction == defs.Direction.Up) ||
|
|
98
|
+
(params.direction == defs.Direction.Down && lastLogEntry.direction == defs.Direction.Down)) {
|
|
78
99
|
index += 1;
|
|
79
100
|
}
|
|
80
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractMigrationAgent.js","sourceRoot":"","sources":["../../src/migrations/AbstractMigrationAgent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,4BAA4B,CAAC;AA0BnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAEnE,MAAM,OAAgB,sBAAsB;IAA5C;
|
|
1
|
+
{"version":3,"file":"AbstractMigrationAgent.js","sourceRoot":"","sources":["../../src/migrations/AbstractMigrationAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,17 @@ export interface DisposableListener {
|
|
|
5
5
|
*/
|
|
6
6
|
disposed: () => void;
|
|
7
7
|
}
|
|
8
|
-
export interface
|
|
8
|
+
export interface ManagedObserverClient<T extends DisposableListener> extends ObserverClient<T> {
|
|
9
9
|
/**
|
|
10
10
|
* Registers a listener that is automatically disposed when the parent is disposed.
|
|
11
11
|
* This is useful for disposing nested listeners.
|
|
12
12
|
*/
|
|
13
13
|
registerManagedListener: (parent: DisposableObserverClient<DisposableListener>, cb: Partial<T>) => () => void;
|
|
14
14
|
}
|
|
15
|
+
export interface DisposableObserverClient<T extends DisposableListener> extends ManagedObserverClient<T>, Disposable {
|
|
16
|
+
}
|
|
17
|
+
export interface AsyncDisposableObserverClient<T extends DisposableListener> extends ManagedObserverClient<T>, AsyncDisposable {
|
|
18
|
+
}
|
|
15
19
|
export declare class DisposableObserver<T extends DisposableListener> extends BaseObserver<T> implements DisposableObserverClient<T> {
|
|
16
20
|
registerManagedListener(parent: DisposableObserverClient<DisposableListener>, cb: Partial<T>): () => void;
|
|
17
21
|
[Symbol.dispose](): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisposableObserver.js","sourceRoot":"","sources":["../../src/utils/DisposableObserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"DisposableObserver.js","sourceRoot":"","sources":["../../src/utils/DisposableObserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAsBjE,MAAM,OAAO,kBACX,SAAQ,YAAe;IAGvB,uBAAuB,CAAC,MAAoD,EAAE,EAAc;QAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,gBAAgB,CAAC;YACtB,QAAQ,EAAE,GAAG,EAAE;gBACb,QAAQ,EAAE,CAAC;YACb,CAAC;SACF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC/C,uBAAuB;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powersync/lib-services-framework",
|
|
3
3
|
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
|
-
"version": "0.0.0-dev-
|
|
4
|
+
"version": "0.0.0-dev-20250116115804",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"better-ajv-errors": "^1.2.0",
|
|
19
19
|
"bson": "^6.8.0",
|
|
20
20
|
"dotenv": "^16.4.5",
|
|
21
|
+
"ipaddr.js": "^2.1.0",
|
|
21
22
|
"lodash": "^4.17.21",
|
|
22
23
|
"ts-codec": "^1.3.0",
|
|
23
24
|
"uuid": "^9.0.1",
|