@powersync/service-core 0.0.0-dev-20240708103353 → 0.0.0-dev-20240709124106

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 CHANGED
@@ -1,14 +1,22 @@
1
1
  # @powersync/service-core
2
2
 
3
- ## 0.0.0-dev-20240708103353
3
+ ## 0.0.0-dev-20240709124106
4
+
5
+ ### Minor Changes
6
+
7
+ - 0a250e3: Support `request.parameters()`, `request.jwt()` and `request.user_id()`.
8
+ Warn on potentially dangerous queries using request parameters.
4
9
 
5
10
  ### Patch Changes
6
11
 
7
12
  - 299becf: Support expressions on request parameters in parameter queries.
13
+ - 2a0d2de: Add logging and hard exit to migration script
8
14
  - 0c2e2f5: Fix schema validation for parameter queries.
15
+ - Updated dependencies [0a250e3]
9
16
  - Updated dependencies [299becf]
10
17
  - Updated dependencies [0c2e2f5]
11
- - @powersync/service-sync-rules@0.0.0-dev-20240708103353
18
+ - Updated dependencies [0a250e3]
19
+ - @powersync/service-sync-rules@0.0.0-dev-20240709124106
12
20
 
13
21
  ## 0.3.0
14
22
 
@@ -1,5 +1,6 @@
1
1
  import { extractRunnerOptions, wrapConfigCommand } from './config-command.js';
2
2
  import { migrate } from '../../migrations/migrations.js';
3
+ import { logger } from '@powersync/lib-services-framework';
3
4
  const COMMAND_NAME = 'migrate';
4
5
  export function registerMigrationAction(program) {
5
6
  const migrationCommand = program.command(COMMAND_NAME);
@@ -9,10 +10,17 @@ export function registerMigrationAction(program) {
9
10
  .argument('<direction>', 'Migration direction. `up` or `down`')
10
11
  .action(async (direction, options) => {
11
12
  const runnerConfig = extractRunnerOptions(options);
12
- await migrate({
13
- direction,
14
- runner_config: runnerConfig
15
- });
13
+ try {
14
+ await migrate({
15
+ direction,
16
+ runner_config: runnerConfig
17
+ });
18
+ process.exit(0);
19
+ }
20
+ catch (e) {
21
+ logger.error(`Migration failure`, e);
22
+ process.exit(1);
23
+ }
16
24
  });
17
25
  }
18
26
  //# sourceMappingURL=migrate-action.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-action.js","sourceRoot":"","sources":["../../../src/entry/commands/migrate-action.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAGzD,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEvD,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAEpC,OAAO,gBAAgB;SACpB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,QAAQ,CAAC,aAAa,EAAE,qCAAqC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,SAAoB,EAAE,OAAO,EAAE,EAAE;QAC9C,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEnD,MAAM,OAAO,CAAC;YACZ,SAAS;YACT,aAAa,EAAE,YAAY;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"migrate-action.js","sourceRoot":"","sources":["../../../src/entry/commands/migrate-action.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEvD,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAEpC,OAAO,gBAAgB;SACpB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,QAAQ,CAAC,aAAa,EAAE,qCAAqC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,SAAoB,EAAE,OAAO,EAAE,EAAE;QAC9C,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI;YACF,MAAM,OAAO,CAAC;gBACZ,SAAS;gBACT,aAAa,EAAE,YAAY;aAC5B,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -6,6 +6,7 @@ import * as util from '../util/util-index.js';
6
6
  import * as locks from '../locks/locks-index.js';
7
7
  import { createMongoMigrationStore } from './store/migration-store.js';
8
8
  import { execute, writeLogsToStore } from './executor.js';
9
+ import { logger } from '@powersync/lib-services-framework';
9
10
  const DEFAULT_MONGO_LOCK_COLLECTION = 'locks';
10
11
  const MONGO_LOCK_PROCESS = 'migrations';
11
12
  const __filename = fileURLToPath(import.meta.url);
@@ -44,6 +45,7 @@ export const migrate = async (options) => {
44
45
  const config = await util.loadConfig(runner_config);
45
46
  const { storage } = config;
46
47
  const client = db.mongo.createMongoClient(storage);
48
+ logger.info('Connecting to MongoDB');
47
49
  await client.connect();
48
50
  const clientDB = client.db(storage.database);
49
51
  const collection = clientDB.collection(DEFAULT_MONGO_LOCK_COLLECTION);
@@ -51,6 +53,7 @@ export const migrate = async (options) => {
51
53
  name: MONGO_LOCK_PROCESS
52
54
  });
53
55
  // Only one process should execute this at a time.
56
+ logger.info('Acquiring lock');
54
57
  const lockId = await manager.acquire();
55
58
  if (!lockId) {
56
59
  throw new Error('Could not acquire lock_id');
@@ -66,10 +69,12 @@ export const migrate = async (options) => {
66
69
  // For the case where the migration is terminated
67
70
  process.addListener('beforeExit', releaseLock);
68
71
  try {
72
+ logger.info('Loading migrations');
69
73
  const migrations = await loadMigrations(MIGRATIONS_DIR, runner_config);
70
74
  // Use the provided config to connect to Mongo
71
75
  const store = createMongoMigrationStore(clientDB);
72
76
  const state = await store.load();
77
+ logger.info('Running migrations');
73
78
  const logStream = execute({
74
79
  direction: direction,
75
80
  migrations,
@@ -82,9 +87,12 @@ export const migrate = async (options) => {
82
87
  });
83
88
  }
84
89
  finally {
90
+ logger.info('Releasing lock');
85
91
  await releaseLock();
92
+ logger.info('Closing database');
86
93
  await client.close(true);
87
94
  process.removeListener('beforeExit', releaseLock);
95
+ logger.info('Done with migrations');
88
96
  }
89
97
  };
90
98
  //# sourceMappingURL=migrations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/migrations/migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/migrations/migrations.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-20240708103353",
8
+ "version": "0.0.0-dev-20240709124106",
9
9
  "main": "dist/index.js",
10
10
  "license": "FSL-1.1-Apache-2.0",
11
11
  "type": "module",
@@ -33,12 +33,12 @@
33
33
  "uuid": "^9.0.1",
34
34
  "winston": "^3.13.0",
35
35
  "yaml": "^2.3.2",
36
- "@powersync/service-jsonbig": "0.17.10",
37
- "@powersync/service-rsocket-router": "0.0.8",
38
- "@powersync/service-jpgwire": "0.17.13",
39
36
  "@powersync/lib-services-framework": "0.1.0",
40
- "@powersync/service-sync-rules": "0.0.0-dev-20240708103353",
41
- "@powersync/service-types": "0.1.0"
37
+ "@powersync/service-jpgwire": "0.17.13",
38
+ "@powersync/service-sync-rules": "0.0.0-dev-20240709124106",
39
+ "@powersync/service-types": "0.1.0",
40
+ "@powersync/service-rsocket-router": "0.0.8",
41
+ "@powersync/service-jsonbig": "0.17.10"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/async": "^3.2.24",
@@ -3,6 +3,7 @@ import { Command } from 'commander';
3
3
  import { extractRunnerOptions, wrapConfigCommand } from './config-command.js';
4
4
  import { migrate } from '../../migrations/migrations.js';
5
5
  import { Direction } from '../../migrations/definitions.js';
6
+ import { logger } from '@powersync/lib-services-framework';
6
7
 
7
8
  const COMMAND_NAME = 'migrate';
8
9
 
@@ -17,9 +18,16 @@ export function registerMigrationAction(program: Command) {
17
18
  .action(async (direction: Direction, options) => {
18
19
  const runnerConfig = extractRunnerOptions(options);
19
20
 
20
- await migrate({
21
- direction,
22
- runner_config: runnerConfig
23
- });
21
+ try {
22
+ await migrate({
23
+ direction,
24
+ runner_config: runnerConfig
25
+ });
26
+
27
+ process.exit(0);
28
+ } catch (e) {
29
+ logger.error(`Migration failure`, e);
30
+ process.exit(1);
31
+ }
24
32
  });
25
33
  }
@@ -8,6 +8,7 @@ import * as locks from '../locks/locks-index.js';
8
8
  import { Direction } from './definitions.js';
9
9
  import { createMongoMigrationStore } from './store/migration-store.js';
10
10
  import { execute, writeLogsToStore } from './executor.js';
11
+ import { logger } from '@powersync/lib-services-framework';
11
12
 
12
13
  const DEFAULT_MONGO_LOCK_COLLECTION = 'locks';
13
14
  const MONGO_LOCK_PROCESS = 'migrations';
@@ -63,6 +64,7 @@ export const migrate = async (options: MigrationOptions) => {
63
64
  const { storage } = config;
64
65
 
65
66
  const client = db.mongo.createMongoClient(storage);
67
+ logger.info('Connecting to MongoDB');
66
68
  await client.connect();
67
69
 
68
70
  const clientDB = client.db(storage.database);
@@ -73,6 +75,7 @@ export const migrate = async (options: MigrationOptions) => {
73
75
  });
74
76
 
75
77
  // Only one process should execute this at a time.
78
+ logger.info('Acquiring lock');
76
79
  const lockId = await manager.acquire();
77
80
 
78
81
  if (!lockId) {
@@ -92,6 +95,7 @@ export const migrate = async (options: MigrationOptions) => {
92
95
  process.addListener('beforeExit', releaseLock);
93
96
 
94
97
  try {
98
+ logger.info('Loading migrations');
95
99
  const migrations = await loadMigrations(MIGRATIONS_DIR, runner_config);
96
100
 
97
101
  // Use the provided config to connect to Mongo
@@ -99,6 +103,7 @@ export const migrate = async (options: MigrationOptions) => {
99
103
 
100
104
  const state = await store.load();
101
105
 
106
+ logger.info('Running migrations');
102
107
  const logStream = execute({
103
108
  direction: direction,
104
109
  migrations,
@@ -111,8 +116,11 @@ export const migrate = async (options: MigrationOptions) => {
111
116
  state
112
117
  });
113
118
  } finally {
119
+ logger.info('Releasing lock');
114
120
  await releaseLock();
121
+ logger.info('Closing database');
115
122
  await client.close(true);
116
123
  process.removeListener('beforeExit', releaseLock);
124
+ logger.info('Done with migrations');
117
125
  }
118
126
  };