@powersync/service-core 1.19.2 → 1.20.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/CHANGELOG.md +50 -0
- package/dist/api/diagnostics.js +11 -4
- package/dist/api/diagnostics.js.map +1 -1
- package/dist/entry/commands/compact-action.js +13 -2
- package/dist/entry/commands/compact-action.js.map +1 -1
- package/dist/entry/commands/config-command.js +2 -2
- package/dist/entry/commands/config-command.js.map +1 -1
- package/dist/replication/AbstractReplicator.js +2 -5
- package/dist/replication/AbstractReplicator.js.map +1 -1
- package/dist/routes/configure-fastify.d.ts +84 -0
- package/dist/routes/endpoints/admin.d.ts +168 -0
- package/dist/routes/endpoints/admin.js +34 -20
- package/dist/routes/endpoints/admin.js.map +1 -1
- package/dist/routes/endpoints/sync-rules.js +6 -9
- package/dist/routes/endpoints/sync-rules.js.map +1 -1
- package/dist/routes/endpoints/sync-stream.js +6 -1
- package/dist/routes/endpoints/sync-stream.js.map +1 -1
- package/dist/storage/BucketStorageBatch.d.ts +21 -8
- package/dist/storage/BucketStorageBatch.js.map +1 -1
- package/dist/storage/BucketStorageFactory.d.ts +48 -15
- package/dist/storage/BucketStorageFactory.js +70 -1
- package/dist/storage/BucketStorageFactory.js.map +1 -1
- package/dist/storage/ChecksumCache.d.ts +5 -2
- package/dist/storage/ChecksumCache.js +8 -4
- package/dist/storage/ChecksumCache.js.map +1 -1
- package/dist/storage/PersistedSyncRulesContent.d.ts +33 -3
- package/dist/storage/PersistedSyncRulesContent.js +80 -1
- package/dist/storage/PersistedSyncRulesContent.js.map +1 -1
- package/dist/storage/SourceTable.d.ts +7 -2
- package/dist/storage/SourceTable.js.map +1 -1
- package/dist/storage/StorageVersionConfig.d.ts +53 -0
- package/dist/storage/StorageVersionConfig.js +53 -0
- package/dist/storage/StorageVersionConfig.js.map +1 -0
- package/dist/storage/SyncRulesBucketStorage.d.ts +14 -4
- package/dist/storage/SyncRulesBucketStorage.js.map +1 -1
- package/dist/storage/storage-index.d.ts +1 -0
- package/dist/storage/storage-index.js +1 -0
- package/dist/storage/storage-index.js.map +1 -1
- package/dist/sync/BucketChecksumState.d.ts +8 -4
- package/dist/sync/BucketChecksumState.js +97 -52
- package/dist/sync/BucketChecksumState.js.map +1 -1
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/util.d.ts +1 -0
- package/dist/sync/util.js +10 -0
- package/dist/sync/util.js.map +1 -1
- package/dist/util/config/collectors/config-collector.js +13 -0
- package/dist/util/config/collectors/config-collector.js.map +1 -1
- package/dist/util/config/sync-rules/impl/base64-sync-rules-collector.d.ts +1 -1
- package/dist/util/config/sync-rules/impl/base64-sync-rules-collector.js +4 -4
- package/dist/util/config/sync-rules/impl/base64-sync-rules-collector.js.map +1 -1
- package/dist/util/config/sync-rules/impl/filesystem-sync-rules-collector.d.ts +1 -1
- package/dist/util/config/sync-rules/impl/filesystem-sync-rules-collector.js +2 -2
- package/dist/util/config/sync-rules/impl/filesystem-sync-rules-collector.js.map +1 -1
- package/dist/util/config/sync-rules/impl/inline-sync-rules-collector.d.ts +1 -1
- package/dist/util/config/sync-rules/impl/inline-sync-rules-collector.js +3 -3
- package/dist/util/config/sync-rules/impl/inline-sync-rules-collector.js.map +1 -1
- package/dist/util/config/types.d.ts +1 -1
- package/dist/util/config/types.js.map +1 -1
- package/dist/util/env.d.ts +1 -0
- package/dist/util/env.js +5 -0
- package/dist/util/env.js.map +1 -1
- package/package.json +6 -6
- package/src/api/diagnostics.ts +12 -4
- package/src/entry/commands/compact-action.ts +15 -2
- package/src/entry/commands/config-command.ts +3 -3
- package/src/replication/AbstractReplicator.ts +3 -5
- package/src/routes/endpoints/admin.ts +43 -25
- package/src/routes/endpoints/sync-rules.ts +14 -13
- package/src/routes/endpoints/sync-stream.ts +6 -1
- package/src/storage/BucketStorageBatch.ts +23 -9
- package/src/storage/BucketStorageFactory.ts +116 -19
- package/src/storage/ChecksumCache.ts +14 -6
- package/src/storage/PersistedSyncRulesContent.ts +119 -4
- package/src/storage/SourceTable.ts +7 -1
- package/src/storage/StorageVersionConfig.ts +78 -0
- package/src/storage/SyncRulesBucketStorage.ts +20 -4
- package/src/storage/storage-index.ts +1 -0
- package/src/sync/BucketChecksumState.ts +147 -65
- package/src/sync/sync.ts +9 -3
- package/src/sync/util.ts +10 -0
- package/src/util/config/collectors/config-collector.ts +16 -0
- package/src/util/config/sync-rules/impl/base64-sync-rules-collector.ts +5 -5
- package/src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts +3 -3
- package/src/util/config/sync-rules/impl/inline-sync-rules-collector.ts +4 -4
- package/src/util/config/types.ts +1 -2
- package/src/util/env.ts +5 -0
- package/test/src/checksum_cache.test.ts +102 -57
- package/test/src/config.test.ts +115 -0
- package/test/src/routes/admin.test.ts +48 -0
- package/test/src/routes/mocks.ts +22 -1
- package/test/src/routes/stream.test.ts +3 -2
- package/test/src/sync/BucketChecksumState.test.ts +332 -93
- package/test/src/utils.ts +9 -0
- package/tsconfig.tsbuildinfo +1 -1
package/dist/sync/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/sync/util.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/sync/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,16 @@ export class ConfigCollector {
|
|
|
26
26
|
*/
|
|
27
27
|
const decoded = this.decode(serialized);
|
|
28
28
|
this.validate(decoded);
|
|
29
|
+
/**
|
|
30
|
+
* For internal convenience, we duplicate sync_rules and sync_config. Making them interchangeable.
|
|
31
|
+
* Note, we only do this after validation (which only allows one option to be present)
|
|
32
|
+
*/
|
|
33
|
+
if (decoded.sync_config) {
|
|
34
|
+
decoded.sync_rules = decoded.sync_config;
|
|
35
|
+
}
|
|
36
|
+
else if (decoded.sync_rules) {
|
|
37
|
+
decoded.sync_config = decoded.sync_rules;
|
|
38
|
+
}
|
|
29
39
|
return decoded;
|
|
30
40
|
}
|
|
31
41
|
/**
|
|
@@ -37,6 +47,9 @@ export class ConfigCollector {
|
|
|
37
47
|
if (!valid.valid) {
|
|
38
48
|
throw new Error(`Failed to validate PowerSync config: ${valid.errors.join(', ')}`);
|
|
39
49
|
}
|
|
50
|
+
if (config.sync_config && config.sync_rules) {
|
|
51
|
+
throw new Error('Both `sync_config` and `sync_rules` are present in the service configuration. Please consolidate into one sync_config.');
|
|
52
|
+
}
|
|
40
53
|
}
|
|
41
54
|
decode(encoded) {
|
|
42
55
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-collector.js","sourceRoot":"","sources":["../../../../src/util/config/collectors/config-collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iCAAa,CAAA;IACb,iCAAa,CAAA;AACf,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED,uFAAuF;AACvF,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,SAAS,EAAE,CAAC;AAEvG,MAAM,OAAgB,eAAe;IASnC;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,aAA2B;QACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;;WAGG;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config-collector.js","sourceRoot":"","sources":["../../../../src/util/config/collectors/config-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { configFile } from '@powersync/service-types';
|
|
1
2
|
import { RunnerConfig, SyncRulesConfig } from '../../types.js';
|
|
2
3
|
import { SyncRulesCollector } from '../sync-collector.js';
|
|
3
|
-
import { configFile } from '@powersync/service-types';
|
|
4
4
|
export declare class Base64SyncRulesCollector extends SyncRulesCollector {
|
|
5
5
|
get name(): string;
|
|
6
6
|
collect(baseConfig: configFile.PowerSyncConfig, runnerConfig: RunnerConfig): Promise<SyncRulesConfig | null>;
|
|
@@ -4,14 +4,14 @@ export class Base64SyncRulesCollector extends SyncRulesCollector {
|
|
|
4
4
|
return 'Base64';
|
|
5
5
|
}
|
|
6
6
|
async collect(baseConfig, runnerConfig) {
|
|
7
|
-
const {
|
|
8
|
-
if (!
|
|
7
|
+
const { sync_config_base64 } = runnerConfig;
|
|
8
|
+
if (!sync_config_base64) {
|
|
9
9
|
return null;
|
|
10
10
|
}
|
|
11
11
|
return {
|
|
12
12
|
present: true,
|
|
13
|
-
exit_on_error: baseConfig.
|
|
14
|
-
content: Buffer.from(
|
|
13
|
+
exit_on_error: baseConfig.sync_config?.exit_on_error ?? true,
|
|
14
|
+
content: Buffer.from(sync_config_base64, 'base64').toString()
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base64-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/base64-sync-rules-collector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base64-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/base64-sync-rules-collector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,wBAAyB,SAAQ,kBAAkB;IAC9D,IAAI,IAAI;QACN,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAsC,EAAE,YAA0B;QAC9E,MAAM,EAAE,kBAAkB,EAAE,GAAG,YAAY,CAAC;QAC5C,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,IAAI,IAAI;YAC5D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE;SAC9D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { configFile } from '@powersync/service-types';
|
|
1
2
|
import { RunnerConfig, SyncRulesConfig } from '../../types.js';
|
|
2
3
|
import { SyncRulesCollector } from '../sync-collector.js';
|
|
3
|
-
import { configFile } from '@powersync/service-types';
|
|
4
4
|
export declare class FileSystemSyncRulesCollector extends SyncRulesCollector {
|
|
5
5
|
get name(): string;
|
|
6
6
|
collect(baseConfig: configFile.PowerSyncConfig, runnerConfig: RunnerConfig): Promise<SyncRulesConfig | null>;
|
|
@@ -5,7 +5,7 @@ export class FileSystemSyncRulesCollector extends SyncRulesCollector {
|
|
|
5
5
|
return 'FileSystem';
|
|
6
6
|
}
|
|
7
7
|
async collect(baseConfig, runnerConfig) {
|
|
8
|
-
const sync_path = baseConfig.
|
|
8
|
+
const sync_path = baseConfig.sync_config?.path;
|
|
9
9
|
if (!sync_path) {
|
|
10
10
|
return null;
|
|
11
11
|
}
|
|
@@ -14,7 +14,7 @@ export class FileSystemSyncRulesCollector extends SyncRulesCollector {
|
|
|
14
14
|
// Only persist the path here, and load on demand using `loadSyncRules()`.
|
|
15
15
|
return {
|
|
16
16
|
present: true,
|
|
17
|
-
exit_on_error: baseConfig.
|
|
17
|
+
exit_on_error: baseConfig.sync_config?.exit_on_error ?? true,
|
|
18
18
|
path: config_path ? path.resolve(path.dirname(config_path), sync_path) : sync_path
|
|
19
19
|
};
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filesystem-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,4BAA6B,SAAQ,kBAAkB;IAClE,IAAI,IAAI;QACN,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAsC,EAAE,YAA0B;QAC9E,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;QAErC,0EAA0E;QAC1E,0EAA0E;QAC1E,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,IAAI,IAAI;YAC5D,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;SACnF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { configFile } from '@powersync/service-types';
|
|
1
2
|
import { SyncRulesConfig } from '../../types.js';
|
|
2
3
|
import { SyncRulesCollector } from '../sync-collector.js';
|
|
3
|
-
import { configFile } from '@powersync/service-types';
|
|
4
4
|
export declare class InlineSyncRulesCollector extends SyncRulesCollector {
|
|
5
5
|
get name(): string;
|
|
6
6
|
collect(baseConfig: configFile.PowerSyncConfig): Promise<SyncRulesConfig | null>;
|
|
@@ -4,14 +4,14 @@ export class InlineSyncRulesCollector extends SyncRulesCollector {
|
|
|
4
4
|
return 'Inline';
|
|
5
5
|
}
|
|
6
6
|
async collect(baseConfig) {
|
|
7
|
-
const content = baseConfig
|
|
7
|
+
const content = baseConfig?.sync_config?.content;
|
|
8
8
|
if (!content) {
|
|
9
9
|
return null;
|
|
10
10
|
}
|
|
11
11
|
return {
|
|
12
12
|
present: true,
|
|
13
|
-
exit_on_error: true,
|
|
14
|
-
...baseConfig.
|
|
13
|
+
exit_on_error: baseConfig.sync_config?.exit_on_error ?? true,
|
|
14
|
+
...baseConfig.sync_config
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/inline-sync-rules-collector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inline-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/inline-sync-rules-collector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,wBAAyB,SAAQ,kBAAkB;IAC9D,IAAI,IAAI;QACN,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAsC;QAClD,MAAM,OAAO,GAAG,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,IAAI,IAAI;YAC5D,GAAG,UAAU,CAAC,WAAW;SAC1B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/util/config/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/util/config/types.ts"],"names":[],"mappings":"AAIA,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,4BAAW,CAAA;IACX,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB"}
|
package/dist/util/env.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare const env: {
|
|
|
3
3
|
POWERSYNC_CONFIG_PATH?: string | undefined;
|
|
4
4
|
POWERSYNC_CONFIG_B64?: string | undefined;
|
|
5
5
|
POWERSYNC_SYNC_RULES_B64?: string | undefined;
|
|
6
|
+
POWERSYNC_SYNC_CONFIG_B64?: string | undefined;
|
|
6
7
|
NODE_ENV?: string | undefined;
|
|
7
8
|
};
|
|
8
9
|
export type Env = typeof env;
|
package/dist/util/env.js
CHANGED
|
@@ -10,9 +10,14 @@ export const env = utils.collectEnvironmentVariables({
|
|
|
10
10
|
*/
|
|
11
11
|
POWERSYNC_CONFIG_B64: utils.type.string.optional(),
|
|
12
12
|
/**
|
|
13
|
+
* @deprecated use POWERSYNC_SYNC_CONFIG_B64 instead.
|
|
13
14
|
* Base64 encoded contents of sync rules YAML
|
|
14
15
|
*/
|
|
15
16
|
POWERSYNC_SYNC_RULES_B64: utils.type.string.optional(),
|
|
17
|
+
/**
|
|
18
|
+
* Base64 encoded contents of sync config YAML
|
|
19
|
+
*/
|
|
20
|
+
POWERSYNC_SYNC_CONFIG_B64: utils.type.string.optional(),
|
|
16
21
|
/**
|
|
17
22
|
* Runner to be started in this process
|
|
18
23
|
*/
|
package/dist/util/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,2BAA2B,CAAC;IACnD;;OAEG;IACH,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IACnD;;OAEG;IACH,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAClD
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,2BAA2B,CAAC;IACnD;;OAEG;IACH,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IACnD;;OAEG;IACH,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAClD;;;OAGG;IACH,wBAAwB,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IACtD;;OAEG;IACH,yBAAyB,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IACvD;;OAEG;IACH,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;IAEhE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "1.
|
|
8
|
+
"version": "1.20.1",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"license": "FSL-1.1-ALv2",
|
|
11
11
|
"type": "module",
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"uuid": "^11.1.0",
|
|
34
34
|
"winston": "^3.13.0",
|
|
35
35
|
"yaml": "^2.3.2",
|
|
36
|
-
"@powersync/lib-services-framework": "0.
|
|
37
|
-
"@powersync/service-
|
|
38
|
-
"@powersync/service-
|
|
39
|
-
"@powersync/service-
|
|
40
|
-
"@powersync/service-
|
|
36
|
+
"@powersync/lib-services-framework": "0.9.0",
|
|
37
|
+
"@powersync/service-jsonbig": "0.17.12",
|
|
38
|
+
"@powersync/service-rsocket-router": "0.2.16",
|
|
39
|
+
"@powersync/service-sync-rules": "0.33.0",
|
|
40
|
+
"@powersync/service-types": "0.15.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/async": "^3.2.24",
|
package/src/api/diagnostics.ts
CHANGED
|
@@ -132,12 +132,20 @@ export async function getSyncRulesStatus(
|
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
134
|
errors.push(
|
|
135
|
-
...syncRuleErrors.map((
|
|
136
|
-
|
|
137
|
-
level:
|
|
138
|
-
message
|
|
135
|
+
...syncRuleErrors.map(({ type, message, location }) => {
|
|
136
|
+
const error: ReplicationError = {
|
|
137
|
+
level: type,
|
|
138
|
+
message,
|
|
139
139
|
ts: now
|
|
140
140
|
};
|
|
141
|
+
if (location != null) {
|
|
142
|
+
error.location = {
|
|
143
|
+
start_offset: location.start,
|
|
144
|
+
end_offset: location.end
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return error;
|
|
141
149
|
})
|
|
142
150
|
);
|
|
143
151
|
|
|
@@ -25,12 +25,25 @@ const COMPACT_MEMORY_LIMIT_MB = Math.min(HEAP_LIMIT / 1024 / 1024 - 128, 1024);
|
|
|
25
25
|
export function registerCompactAction(program: Command) {
|
|
26
26
|
const compactCommand = program
|
|
27
27
|
.command(COMMAND_NAME)
|
|
28
|
-
.option(`-b, --buckets [buckets]`, '
|
|
28
|
+
.option(`-b, --buckets [buckets]`, 'Full bucket names, comma-separated (e.g., "global[],mybucket[\\"user1\\"]")');
|
|
29
29
|
|
|
30
30
|
wrapConfigCommand(compactCommand);
|
|
31
31
|
|
|
32
32
|
return compactCommand.description('Compact storage').action(async (options) => {
|
|
33
|
-
const buckets = options.buckets
|
|
33
|
+
const buckets = options.buckets
|
|
34
|
+
?.split(',')
|
|
35
|
+
.map((b: string) => b.trim())
|
|
36
|
+
.filter(Boolean);
|
|
37
|
+
if (buckets) {
|
|
38
|
+
const invalid = buckets.filter((b: string) => !b.includes('['));
|
|
39
|
+
if (invalid.length > 0) {
|
|
40
|
+
logger.error(
|
|
41
|
+
`Invalid bucket names: ${invalid.join(', ')}. ` +
|
|
42
|
+
`Pass full bucket names (e.g., "global[]"), not bucket definition names (e.g., "global").`
|
|
43
|
+
);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
34
47
|
if (buckets == null) {
|
|
35
48
|
logger.info('Compacting storage for all buckets...');
|
|
36
49
|
} else {
|
|
@@ -19,8 +19,8 @@ export function wrapConfigCommand(command: Command) {
|
|
|
19
19
|
)
|
|
20
20
|
.option(
|
|
21
21
|
`-sync64, --sync-base64 [base64]`,
|
|
22
|
-
'Base64 encoded YAML Sync
|
|
23
|
-
util.env.POWERSYNC_SYNC_RULES_B64
|
|
22
|
+
'Base64 encoded YAML Sync Config. Defaults to process.env.POWERSYNC_SYNC_CONFIG_B64 or process.env.POWERSYNC_SYNC_RULES_B64 for backwards compatility.',
|
|
23
|
+
util.env.POWERSYNC_SYNC_CONFIG_B64 || util.env.POWERSYNC_SYNC_RULES_B64
|
|
24
24
|
);
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -31,6 +31,6 @@ export function extractRunnerOptions(options: any): util.RunnerConfig {
|
|
|
31
31
|
return {
|
|
32
32
|
config_path: options.configPath,
|
|
33
33
|
config_base64: options.configBase64,
|
|
34
|
-
|
|
34
|
+
sync_config_base64: options.syncBase64
|
|
35
35
|
};
|
|
36
36
|
}
|
|
@@ -138,11 +138,9 @@ export abstract class AbstractReplicator<T extends AbstractReplicationJob = Abst
|
|
|
138
138
|
// Configure new sync rules, if they have changed.
|
|
139
139
|
// In that case, also immediately take out a lock, so that another process doesn't start replication on it.
|
|
140
140
|
|
|
141
|
-
const { lock } = await this.storage.configureSyncRules(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
validate: this.syncRuleProvider.exitOnError
|
|
145
|
-
});
|
|
141
|
+
const { lock } = await this.storage.configureSyncRules(
|
|
142
|
+
storage.updateSyncRulesFromYaml(syncRules, { lock: true, validate: this.syncRuleProvider.exitOnError })
|
|
143
|
+
);
|
|
146
144
|
if (lock) {
|
|
147
145
|
configuredLock = lock;
|
|
148
146
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ErrorCode, errors, router, schema } from '@powersync/lib-services-framework';
|
|
2
|
-
import { SqlSyncRules, StaticSchema } from '@powersync/service-sync-rules';
|
|
2
|
+
import { SourceSchema, SqlSyncRules, StaticSchema } from '@powersync/service-sync-rules';
|
|
3
3
|
import { internal_routes } from '@powersync/service-types';
|
|
4
4
|
|
|
5
|
+
import { DEFAULT_HYDRATION_STATE } from '@powersync/service-sync-rules';
|
|
5
6
|
import * as api from '../../api/api-index.js';
|
|
6
7
|
import * as storage from '../../storage/storage-index.js';
|
|
7
8
|
import { authApi } from '../auth.js';
|
|
@@ -130,12 +131,13 @@ export const reprocess = routeDefinition({
|
|
|
130
131
|
});
|
|
131
132
|
}
|
|
132
133
|
|
|
133
|
-
const new_rules = await activeBucketStorage.updateSyncRules(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
134
|
+
const new_rules = await activeBucketStorage.updateSyncRules(
|
|
135
|
+
storage.updateSyncRulesFromYaml(active.sync_rules.config.content, {
|
|
136
|
+
// These sync rules already passed validation. But if the rules are not valid anymore due
|
|
137
|
+
// to a service change, we do want to report the error here.
|
|
138
|
+
validate: true
|
|
139
|
+
})
|
|
140
|
+
);
|
|
139
141
|
|
|
140
142
|
const baseConfig = await apiHandler.getSourceConfig();
|
|
141
143
|
|
|
@@ -152,6 +154,36 @@ export const reprocess = routeDefinition({
|
|
|
152
154
|
}
|
|
153
155
|
});
|
|
154
156
|
|
|
157
|
+
class FakeSyncRulesContentForValidation extends storage.PersistedSyncRulesContent {
|
|
158
|
+
constructor(
|
|
159
|
+
private readonly apiHandler: api.RouteAPI,
|
|
160
|
+
private readonly schema: SourceSchema,
|
|
161
|
+
data: storage.PersistedSyncRulesContentData
|
|
162
|
+
) {
|
|
163
|
+
super(data);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
current_lock: storage.ReplicationLock | null = null;
|
|
167
|
+
|
|
168
|
+
async lock(): Promise<storage.ReplicationLock> {
|
|
169
|
+
throw new Error('Lock not implemented');
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
parsed(options: storage.ParseSyncRulesOptions): storage.PersistedSyncRules {
|
|
173
|
+
return {
|
|
174
|
+
...this,
|
|
175
|
+
sync_rules: SqlSyncRules.fromYaml(this.sync_rules_content, {
|
|
176
|
+
...this.apiHandler.getParseSyncRulesOptions(),
|
|
177
|
+
schema: this.schema
|
|
178
|
+
}),
|
|
179
|
+
hydrationState: DEFAULT_HYDRATION_STATE,
|
|
180
|
+
hydratedSyncRules() {
|
|
181
|
+
return this.sync_rules.config.hydrate({ hydrationState: DEFAULT_HYDRATION_STATE });
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
155
187
|
export const validate = routeDefinition({
|
|
156
188
|
path: '/api/admin/v1/validate',
|
|
157
189
|
method: router.HTTPMethod.POST,
|
|
@@ -167,30 +199,16 @@ export const validate = routeDefinition({
|
|
|
167
199
|
const schemaData = await api.getConnectionsSchema(apiHandler);
|
|
168
200
|
const schema = new StaticSchema(schemaData.connections);
|
|
169
201
|
|
|
170
|
-
const sync_rules
|
|
202
|
+
const sync_rules = new FakeSyncRulesContentForValidation(apiHandler, schema, {
|
|
171
203
|
// Dummy values
|
|
172
204
|
id: 0,
|
|
173
205
|
slot_name: '',
|
|
174
206
|
active: false,
|
|
175
207
|
last_checkpoint_lsn: '',
|
|
176
|
-
|
|
177
|
-
parsed() {
|
|
178
|
-
return {
|
|
179
|
-
...this,
|
|
180
|
-
sync_rules: SqlSyncRules.fromYaml(content, {
|
|
181
|
-
...apiHandler.getParseSyncRulesOptions(),
|
|
182
|
-
schema
|
|
183
|
-
}),
|
|
184
|
-
hydratedSyncRules() {
|
|
185
|
-
return this.sync_rules.config.hydrate();
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
},
|
|
208
|
+
storageVersion: storage.LEGACY_STORAGE_VERSION,
|
|
189
209
|
sync_rules_content: content,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
};
|
|
210
|
+
compiled_plan: null
|
|
211
|
+
});
|
|
194
212
|
|
|
195
213
|
const connectionStatus = await apiHandler.getConnectionStatus();
|
|
196
214
|
if (!connectionStatus) {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ErrorCode, errors, router, schema } from '@powersync/lib-services-framework';
|
|
2
|
-
import { SqlSyncRules, SyncRulesErrors } from '@powersync/service-sync-rules';
|
|
2
|
+
import { SqlSyncRules, SyncConfigWithErrors, SyncRulesErrors } from '@powersync/service-sync-rules';
|
|
3
3
|
import type { FastifyPluginAsync } from 'fastify';
|
|
4
4
|
import * as t from 'ts-codec';
|
|
5
5
|
|
|
6
6
|
import { RouteAPI } from '../../api/RouteAPI.js';
|
|
7
7
|
import { authApi } from '../auth.js';
|
|
8
8
|
import { routeDefinition } from '../router.js';
|
|
9
|
+
import { updateSyncRulesFromConfig, updateSyncRulesFromYaml } from '../../storage/BucketStorageFactory.js';
|
|
9
10
|
|
|
10
11
|
const DeploySyncRulesRequest = t.object({
|
|
11
12
|
content: t.string
|
|
@@ -51,10 +52,11 @@ export const deploySyncRules = routeDefinition({
|
|
|
51
52
|
});
|
|
52
53
|
}
|
|
53
54
|
const content = payload.params.content;
|
|
55
|
+
let syncConfig: SyncConfigWithErrors;
|
|
54
56
|
|
|
55
57
|
try {
|
|
56
58
|
const apiHandler = service_context.routerEngine.getAPI();
|
|
57
|
-
SqlSyncRules.fromYaml(payload.params.content, {
|
|
59
|
+
syncConfig = SqlSyncRules.fromYaml(payload.params.content, {
|
|
58
60
|
...apiHandler.getParseSyncRulesOptions(),
|
|
59
61
|
// We don't do any schema-level validation at this point
|
|
60
62
|
schema: undefined
|
|
@@ -68,11 +70,9 @@ export const deploySyncRules = routeDefinition({
|
|
|
68
70
|
});
|
|
69
71
|
}
|
|
70
72
|
|
|
71
|
-
const sync_rules = await storageEngine.activeBucketStorage.updateSyncRules(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
validate: false
|
|
75
|
-
});
|
|
73
|
+
const sync_rules = await storageEngine.activeBucketStorage.updateSyncRules(
|
|
74
|
+
updateSyncRulesFromConfig(syncConfig.config)
|
|
75
|
+
);
|
|
76
76
|
|
|
77
77
|
return {
|
|
78
78
|
slot_name: sync_rules.slot_name
|
|
@@ -168,12 +168,13 @@ export const reprocessSyncRules = routeDefinition({
|
|
|
168
168
|
});
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
const new_rules = await activeBucketStorage.updateSyncRules(
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
171
|
+
const new_rules = await activeBucketStorage.updateSyncRules(
|
|
172
|
+
updateSyncRulesFromYaml(sync_rules.sync_rules.config.content, {
|
|
173
|
+
// These sync rules already passed validation. But if the rules are not valid anymore due
|
|
174
|
+
// to a service change, we do want to report the error here.
|
|
175
|
+
validate: true
|
|
176
|
+
})
|
|
177
|
+
);
|
|
177
178
|
return {
|
|
178
179
|
slot_name: new_rules.slot_name
|
|
179
180
|
};
|
|
@@ -142,7 +142,12 @@ export const syncStreamed = routeDefinition({
|
|
|
142
142
|
status: 200,
|
|
143
143
|
headers: {
|
|
144
144
|
'Content-Type': useBson ? concatenatedBsonContentType : ndJsonContentType,
|
|
145
|
-
...encodingHeaders
|
|
145
|
+
...encodingHeaders,
|
|
146
|
+
// If the service is behind an nginx reverse-proxy with the default configuration, the response we're about to
|
|
147
|
+
// send would be buffered. This is not what we want for this streaming endpoint, and this behavior keeps
|
|
148
|
+
// breaking users. Setting this unconditionally isn't great, but we don't have a reliable way of checking
|
|
149
|
+
// whether we're behind nginx and we just want the default config to work.
|
|
150
|
+
'X-Accel-Buffering': 'no'
|
|
146
151
|
},
|
|
147
152
|
data: stream,
|
|
148
153
|
afterSend: async (details) => {
|
|
@@ -45,19 +45,15 @@ export interface BucketStorageBatch extends ObserverClient<BucketBatchStorageLis
|
|
|
45
45
|
* Flush and commit any saved ops. This creates a new checkpoint by default.
|
|
46
46
|
*
|
|
47
47
|
* Only call this after a transaction.
|
|
48
|
-
*
|
|
49
|
-
* Returns true if either (1) a new checkpoint was created, or (2) there are no changes to commit.
|
|
50
48
|
*/
|
|
51
|
-
commit(lsn: string, options?: BucketBatchCommitOptions): Promise<
|
|
49
|
+
commit(lsn: string, options?: BucketBatchCommitOptions): Promise<CheckpointResult>;
|
|
52
50
|
|
|
53
51
|
/**
|
|
54
52
|
* Advance the checkpoint LSN position, without any associated op.
|
|
55
53
|
*
|
|
56
54
|
* This must only be called when not inside a transaction.
|
|
57
|
-
*
|
|
58
|
-
* @returns true if the checkpoint was advanced, false if this was a no-op
|
|
59
55
|
*/
|
|
60
|
-
keepalive(lsn: string): Promise<
|
|
56
|
+
keepalive(lsn: string): Promise<CheckpointResult>;
|
|
61
57
|
|
|
62
58
|
/**
|
|
63
59
|
* Set the LSN that replication should resume from.
|
|
@@ -83,9 +79,9 @@ export interface BucketStorageBatch extends ObserverClient<BucketBatchStorageLis
|
|
|
83
79
|
*/
|
|
84
80
|
resumeFromLsn: string | null;
|
|
85
81
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
82
|
+
markTableSnapshotDone(tables: SourceTable[], no_checkpoint_before_lsn?: string): Promise<SourceTable[]>;
|
|
83
|
+
markTableSnapshotRequired(table: SourceTable): Promise<void>;
|
|
84
|
+
markAllSnapshotDone(no_checkpoint_before_lsn: string): Promise<void>;
|
|
89
85
|
|
|
90
86
|
updateTableProgress(table: SourceTable, progress: Partial<TableSnapshotStatus>): Promise<SourceTable>;
|
|
91
87
|
|
|
@@ -166,6 +162,24 @@ export interface SaveDelete {
|
|
|
166
162
|
afterReplicaId?: undefined;
|
|
167
163
|
}
|
|
168
164
|
|
|
165
|
+
export interface CheckpointResult {
|
|
166
|
+
/**
|
|
167
|
+
* True if any of these are true:
|
|
168
|
+
* 1. A snapshot is in progress.
|
|
169
|
+
* 2. The last checkpoint is older than "no_checkpoint_before" (if provided).
|
|
170
|
+
* 3. Replication was restarted with a lower LSN, and has not caught up yet.
|
|
171
|
+
*/
|
|
172
|
+
checkpointBlocked: boolean;
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* True if a checkpoint was actually created by this operation. This can be false even if checkpointBlocked is false,
|
|
176
|
+
* if the checkpoint was empty.
|
|
177
|
+
*
|
|
178
|
+
* This is primarily used for testing.
|
|
179
|
+
*/
|
|
180
|
+
checkpointCreated: boolean;
|
|
181
|
+
}
|
|
182
|
+
|
|
169
183
|
export interface BucketBatchStorageListener {
|
|
170
184
|
replicationEvent: (payload: ReplicationEventPayload) => void;
|
|
171
185
|
}
|