@breeztech/breez-sdk-spark 0.14.0 → 0.15.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.
Files changed (37) hide show
  1. package/breez-sdk-spark.tgz +0 -0
  2. package/bundler/breez_sdk_spark_wasm.d.ts +114 -40
  3. package/bundler/breez_sdk_spark_wasm.js +1 -1
  4. package/bundler/breez_sdk_spark_wasm_bg.js +118 -104
  5. package/bundler/breez_sdk_spark_wasm_bg.wasm +0 -0
  6. package/bundler/breez_sdk_spark_wasm_bg.wasm.d.ts +12 -11
  7. package/deno/breez_sdk_spark_wasm.d.ts +114 -40
  8. package/deno/breez_sdk_spark_wasm.js +118 -104
  9. package/deno/breez_sdk_spark_wasm_bg.wasm +0 -0
  10. package/deno/breez_sdk_spark_wasm_bg.wasm.d.ts +12 -11
  11. package/nodejs/breez_sdk_spark_wasm.d.ts +114 -40
  12. package/nodejs/breez_sdk_spark_wasm.js +121 -106
  13. package/nodejs/breez_sdk_spark_wasm_bg.wasm +0 -0
  14. package/nodejs/breez_sdk_spark_wasm_bg.wasm.d.ts +12 -11
  15. package/nodejs/index.mjs +3 -2
  16. package/nodejs/mysql-session-manager/index.cjs +26 -8
  17. package/nodejs/mysql-session-manager/migrations.cjs +40 -3
  18. package/nodejs/mysql-storage/index.cjs +67 -48
  19. package/nodejs/mysql-storage/migrations.cjs +220 -85
  20. package/nodejs/mysql-token-store/index.cjs +133 -68
  21. package/nodejs/mysql-token-store/migrations.cjs +309 -80
  22. package/nodejs/mysql-tree-store/index.cjs +76 -41
  23. package/nodejs/mysql-tree-store/migrations.cjs +254 -71
  24. package/nodejs/postgres-session-manager/index.cjs +27 -9
  25. package/nodejs/postgres-session-manager/migrations.cjs +45 -6
  26. package/nodejs/postgres-storage/index.cjs +81 -62
  27. package/nodejs/postgres-storage/migrations.cjs +207 -79
  28. package/nodejs/postgres-token-store/index.cjs +111 -67
  29. package/nodejs/postgres-token-store/migrations.cjs +153 -61
  30. package/nodejs/postgres-tree-store/index.cjs +60 -42
  31. package/nodejs/postgres-tree-store/migrations.cjs +130 -46
  32. package/package.json +1 -1
  33. package/ssr/index.js +14 -9
  34. package/web/breez_sdk_spark_wasm.d.ts +126 -51
  35. package/web/breez_sdk_spark_wasm.js +118 -104
  36. package/web/breez_sdk_spark_wasm_bg.wasm +0 -0
  37. package/web/breez_sdk_spark_wasm_bg.wasm.d.ts +12 -11
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Database Migration Manager for Breez SDK PostgreSQL Tree Store
3
3
  *
4
- * Uses a tree_schema_migrations table + pg_advisory_xact_lock to safely run
4
+ * Uses a brz_tree_schema_migrations table + pg_advisory_xact_lock to safely run
5
5
  * migrations from concurrent processes.
6
6
  */
7
7
 
@@ -39,9 +39,11 @@ class TreeStoreMigrationManager {
39
39
  // Transaction-level advisory lock — automatically released on COMMIT/ROLLBACK
40
40
  await client.query(`SELECT pg_advisory_xact_lock(${MIGRATION_LOCK_ID})`);
41
41
 
42
+ await this._applySchemaRenames(client);
43
+
42
44
  // Create the migrations tracking table if needed
43
45
  await client.query(`
44
- CREATE TABLE IF NOT EXISTS tree_schema_migrations (
46
+ CREATE TABLE IF NOT EXISTS brz_tree_schema_migrations (
45
47
  version INTEGER PRIMARY KEY,
46
48
  applied_at TIMESTAMPTZ DEFAULT NOW()
47
49
  )
@@ -49,7 +51,7 @@ class TreeStoreMigrationManager {
49
51
 
50
52
  // Get current version
51
53
  const versionResult = await client.query(
52
- "SELECT COALESCE(MAX(version), 0) AS version FROM tree_schema_migrations"
54
+ "SELECT COALESCE(MAX(version), 0) AS version FROM brz_tree_schema_migrations"
53
55
  );
54
56
  const currentVersion = versionResult.rows[0].version;
55
57
 
@@ -76,7 +78,7 @@ class TreeStoreMigrationManager {
76
78
  }
77
79
 
78
80
  await client.query(
79
- "INSERT INTO tree_schema_migrations (version) VALUES ($1)",
81
+ "INSERT INTO brz_tree_schema_migrations (version) VALUES ($1)",
80
82
  [version]
81
83
  );
82
84
  }
@@ -94,6 +96,88 @@ class TreeStoreMigrationManager {
94
96
  }
95
97
  }
96
98
 
99
+ /**
100
+ * Pre-prefix rename. Canary-gated on the legacy `tree_schema_migrations`
101
+ * table.
102
+ * @param {import('pg').PoolClient} client
103
+ */
104
+ async _applySchemaRenames(client) {
105
+ const canary = await client.query(
106
+ `SELECT EXISTS (
107
+ SELECT 1 FROM information_schema.tables
108
+ WHERE table_schema = current_schema()
109
+ AND table_name = 'tree_schema_migrations'
110
+ ) AS exists`
111
+ );
112
+ if (!canary.rows[0].exists) {
113
+ return;
114
+ }
115
+
116
+ const tableRenames = [
117
+ ["tree_reservations", "brz_tree_reservations"],
118
+ ["tree_leaves", "brz_tree_leaves"],
119
+ ["tree_spent_leaves", "brz_tree_spent_leaves"],
120
+ ["tree_swap_status", "brz_tree_swap_status"],
121
+ ];
122
+ for (const [oldName, newName] of tableRenames) {
123
+ await client.query(
124
+ `ALTER TABLE IF EXISTS ${oldName} RENAME TO ${newName}`
125
+ );
126
+ }
127
+
128
+ const indexRenames = [
129
+ ["idx_tree_leaves_user_available", "brz_idx_tree_leaves_user_available"],
130
+ ["idx_tree_leaves_user_reservation", "brz_idx_tree_leaves_user_reservation"],
131
+ ["idx_tree_leaves_user_added_at", "brz_idx_tree_leaves_user_added_at"],
132
+ // Pre-multi-tenant indexes (dropped by the multi-tenant migration).
133
+ ["idx_tree_leaves_available", "brz_idx_tree_leaves_available"],
134
+ ["idx_tree_leaves_reservation", "brz_idx_tree_leaves_reservation"],
135
+ ["idx_tree_leaves_added_at", "brz_idx_tree_leaves_added_at"],
136
+ ];
137
+ for (const [oldName, newName] of indexRenames) {
138
+ await client.query(
139
+ `ALTER INDEX IF EXISTS ${oldName} RENAME TO ${newName}`
140
+ );
141
+ }
142
+
143
+ const constraintRenames = [
144
+ ["brz_tree_reservations", "tree_reservations_pkey", "brz_tree_reservations_pkey"],
145
+ ["brz_tree_leaves", "tree_leaves_pkey", "brz_tree_leaves_pkey"],
146
+ [
147
+ "brz_tree_leaves",
148
+ "tree_leaves_user_id_reservation_id_fkey",
149
+ "brz_tree_leaves_user_id_reservation_id_fkey",
150
+ ],
151
+ // Pre-multi-tenant FK (single-column). Rename so the post-tenant
152
+ // migration's `DROP CONSTRAINT IF EXISTS brz_*_fkey` finds it.
153
+ [
154
+ "brz_tree_leaves",
155
+ "tree_leaves_reservation_id_fkey",
156
+ "brz_tree_leaves_reservation_id_fkey",
157
+ ],
158
+ ["brz_tree_spent_leaves", "tree_spent_leaves_pkey", "brz_tree_spent_leaves_pkey"],
159
+ ["brz_tree_swap_status", "tree_swap_status_pkey", "brz_tree_swap_status_pkey"],
160
+ ];
161
+ for (const [table, oldName, newName] of constraintRenames) {
162
+ await client.query(
163
+ `DO $$ BEGIN
164
+ IF EXISTS (
165
+ SELECT 1 FROM information_schema.table_constraints
166
+ WHERE table_schema = current_schema()
167
+ AND table_name = '${table}'
168
+ AND constraint_name = '${oldName}'
169
+ ) THEN
170
+ ALTER TABLE ${table} RENAME CONSTRAINT ${oldName} TO ${newName};
171
+ END IF;
172
+ END $$`
173
+ );
174
+ }
175
+
176
+ await client.query(
177
+ `ALTER TABLE IF EXISTS tree_schema_migrations RENAME TO brz_tree_schema_migrations`
178
+ );
179
+ }
180
+
97
181
  _log(level, message) {
98
182
  if (this.logger && typeof this.logger.log === "function") {
99
183
  this.logger.log({ line: message, level });
@@ -118,45 +202,45 @@ class TreeStoreMigrationManager {
118
202
  {
119
203
  name: "Create tree store tables",
120
204
  sql: [
121
- `CREATE TABLE IF NOT EXISTS tree_reservations (
205
+ `CREATE TABLE IF NOT EXISTS brz_tree_reservations (
122
206
  id TEXT PRIMARY KEY,
123
207
  purpose TEXT NOT NULL,
124
208
  pending_change_amount BIGINT NOT NULL DEFAULT 0,
125
209
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
126
210
  )`,
127
211
 
128
- `CREATE TABLE IF NOT EXISTS tree_leaves (
212
+ `CREATE TABLE IF NOT EXISTS brz_tree_leaves (
129
213
  id TEXT PRIMARY KEY,
130
214
  status TEXT NOT NULL,
131
215
  is_missing_from_operators BOOLEAN NOT NULL DEFAULT FALSE,
132
- reservation_id TEXT REFERENCES tree_reservations(id) ON DELETE SET NULL,
216
+ reservation_id TEXT REFERENCES brz_tree_reservations(id) ON DELETE SET NULL,
133
217
  data JSONB NOT NULL,
134
218
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
135
219
  added_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
136
220
  )`,
137
221
 
138
- `CREATE TABLE IF NOT EXISTS tree_spent_leaves (
222
+ `CREATE TABLE IF NOT EXISTS brz_tree_spent_leaves (
139
223
  leaf_id TEXT PRIMARY KEY,
140
224
  spent_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
141
225
  )`,
142
226
 
143
- `CREATE INDEX IF NOT EXISTS idx_tree_leaves_available ON tree_leaves(status, is_missing_from_operators)
227
+ `CREATE INDEX IF NOT EXISTS brz_idx_tree_leaves_available ON brz_tree_leaves(status, is_missing_from_operators)
144
228
  WHERE status = 'Available' AND is_missing_from_operators = FALSE`,
145
229
 
146
- `CREATE INDEX IF NOT EXISTS idx_tree_leaves_reservation ON tree_leaves(reservation_id)
230
+ `CREATE INDEX IF NOT EXISTS brz_idx_tree_leaves_reservation ON brz_tree_leaves(reservation_id)
147
231
  WHERE reservation_id IS NOT NULL`,
148
232
 
149
- `CREATE INDEX IF NOT EXISTS idx_tree_leaves_added_at ON tree_leaves(added_at)`,
233
+ `CREATE INDEX IF NOT EXISTS brz_idx_tree_leaves_added_at ON brz_tree_leaves(added_at)`,
150
234
  ],
151
235
  },
152
236
  {
153
237
  name: "Add swap status tracking",
154
238
  sql: [
155
- `CREATE TABLE IF NOT EXISTS tree_swap_status (
239
+ `CREATE TABLE IF NOT EXISTS brz_tree_swap_status (
156
240
  id INTEGER PRIMARY KEY DEFAULT 1 CHECK (id = 1),
157
241
  last_completed_at TIMESTAMPTZ
158
242
  )`,
159
- `INSERT INTO tree_swap_status (id) VALUES (1) ON CONFLICT DO NOTHING`,
243
+ `INSERT INTO brz_tree_swap_status (id) VALUES (1) ON CONFLICT DO NOTHING`,
160
244
  ],
161
245
  },
162
246
  {
@@ -170,52 +254,52 @@ class TreeStoreMigrationManager {
170
254
  name: "Multi-tenant scoping: add user_id and rewrite primary keys",
171
255
  sql: [
172
256
  // Drop the old single-column FK FIRST, before touching the
173
- // tree_reservations PK it depends on.
174
- `ALTER TABLE tree_leaves
175
- DROP CONSTRAINT IF EXISTS tree_leaves_reservation_id_fkey`,
176
-
177
- // tree_reservations: scope by user_id.
178
- `ALTER TABLE tree_reservations ADD COLUMN user_id BYTEA`,
179
- `UPDATE tree_reservations SET user_id = ${idLit}`,
180
- `ALTER TABLE tree_reservations
257
+ // brz_tree_reservations PK it depends on.
258
+ `ALTER TABLE brz_tree_leaves
259
+ DROP CONSTRAINT IF EXISTS brz_tree_leaves_reservation_id_fkey`,
260
+
261
+ // brz_tree_reservations: scope by user_id.
262
+ `ALTER TABLE brz_tree_reservations ADD COLUMN user_id BYTEA`,
263
+ `UPDATE brz_tree_reservations SET user_id = ${idLit}`,
264
+ `ALTER TABLE brz_tree_reservations
181
265
  ALTER COLUMN user_id SET NOT NULL,
182
- DROP CONSTRAINT IF EXISTS tree_reservations_pkey,
266
+ DROP CONSTRAINT IF EXISTS brz_tree_reservations_pkey,
183
267
  ADD PRIMARY KEY (user_id, id)`,
184
268
 
185
- // tree_leaves: add user_id, rekey, and re-add the composite FK.
186
- `ALTER TABLE tree_leaves ADD COLUMN user_id BYTEA`,
187
- `UPDATE tree_leaves SET user_id = ${idLit}`,
188
- `ALTER TABLE tree_leaves
269
+ // brz_tree_leaves: add user_id, rekey, and re-add the composite FK.
270
+ `ALTER TABLE brz_tree_leaves ADD COLUMN user_id BYTEA`,
271
+ `UPDATE brz_tree_leaves SET user_id = ${idLit}`,
272
+ `ALTER TABLE brz_tree_leaves
189
273
  ALTER COLUMN user_id SET NOT NULL,
190
- DROP CONSTRAINT IF EXISTS tree_leaves_pkey,
274
+ DROP CONSTRAINT IF EXISTS brz_tree_leaves_pkey,
191
275
  ADD PRIMARY KEY (user_id, id),
192
276
  ADD FOREIGN KEY (user_id, reservation_id)
193
- REFERENCES tree_reservations(user_id, id)`,
194
- `DROP INDEX IF EXISTS idx_tree_leaves_available`,
195
- `DROP INDEX IF EXISTS idx_tree_leaves_reservation`,
196
- `DROP INDEX IF EXISTS idx_tree_leaves_added_at`,
197
- `CREATE INDEX idx_tree_leaves_user_available
198
- ON tree_leaves(user_id, status, is_missing_from_operators)
277
+ REFERENCES brz_tree_reservations(user_id, id)`,
278
+ `DROP INDEX IF EXISTS brz_idx_tree_leaves_available`,
279
+ `DROP INDEX IF EXISTS brz_idx_tree_leaves_reservation`,
280
+ `DROP INDEX IF EXISTS brz_idx_tree_leaves_added_at`,
281
+ `CREATE INDEX brz_idx_tree_leaves_user_available
282
+ ON brz_tree_leaves(user_id, status, is_missing_from_operators)
199
283
  WHERE status = 'Available' AND is_missing_from_operators = FALSE`,
200
- `CREATE INDEX idx_tree_leaves_user_reservation
201
- ON tree_leaves(user_id, reservation_id)
284
+ `CREATE INDEX brz_idx_tree_leaves_user_reservation
285
+ ON brz_tree_leaves(user_id, reservation_id)
202
286
  WHERE reservation_id IS NOT NULL`,
203
- `CREATE INDEX idx_tree_leaves_user_added_at ON tree_leaves(user_id, added_at)`,
287
+ `CREATE INDEX brz_idx_tree_leaves_user_added_at ON brz_tree_leaves(user_id, added_at)`,
204
288
 
205
- // tree_spent_leaves: scope by user_id.
206
- `ALTER TABLE tree_spent_leaves ADD COLUMN user_id BYTEA`,
207
- `UPDATE tree_spent_leaves SET user_id = ${idLit}`,
208
- `ALTER TABLE tree_spent_leaves
289
+ // brz_tree_spent_leaves: scope by user_id.
290
+ `ALTER TABLE brz_tree_spent_leaves ADD COLUMN user_id BYTEA`,
291
+ `UPDATE brz_tree_spent_leaves SET user_id = ${idLit}`,
292
+ `ALTER TABLE brz_tree_spent_leaves
209
293
  ALTER COLUMN user_id SET NOT NULL,
210
- DROP CONSTRAINT IF EXISTS tree_spent_leaves_pkey,
294
+ DROP CONSTRAINT IF EXISTS brz_tree_spent_leaves_pkey,
211
295
  ADD PRIMARY KEY (user_id, leaf_id)`,
212
296
 
213
- // tree_swap_status was a singleton (PK id=1, CHECK id=1). Drop the id
297
+ // brz_tree_swap_status was a singleton (PK id=1, CHECK id=1). Drop the id
214
298
  // column (CASCADE removes both PK and CHECK), then re-key by user_id.
215
- `ALTER TABLE tree_swap_status DROP COLUMN id CASCADE`,
216
- `ALTER TABLE tree_swap_status ADD COLUMN user_id BYTEA`,
217
- `UPDATE tree_swap_status SET user_id = ${idLit}`,
218
- `ALTER TABLE tree_swap_status
299
+ `ALTER TABLE brz_tree_swap_status DROP COLUMN id CASCADE`,
300
+ `ALTER TABLE brz_tree_swap_status ADD COLUMN user_id BYTEA`,
301
+ `UPDATE brz_tree_swap_status SET user_id = ${idLit}`,
302
+ `ALTER TABLE brz_tree_swap_status
219
303
  ALTER COLUMN user_id SET NOT NULL,
220
304
  ADD PRIMARY KEY (user_id)`,
221
305
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@breeztech/breez-sdk-spark",
3
- "version": "0.14.0",
3
+ "version": "0.15.1",
4
4
  "description": "Breez Spark SDK",
5
5
  "repository": "https://github.com/breez/spark-sdk",
6
6
  "author": "Breez <contact@breez.technology> (https://github.com/breez)",
package/ssr/index.js CHANGED
@@ -63,6 +63,11 @@ export function defaultPostgresStorageConfig(...args) {
63
63
  return _module.defaultPostgresStorageConfig(...args);
64
64
  }
65
65
 
66
+ export function defaultServerConfig(...args) {
67
+ if (!_module) _notInitialized('defaultServerConfig');
68
+ return _module.defaultServerConfig(...args);
69
+ }
70
+
66
71
  export function getSparkStatus(...args) {
67
72
  if (!_module) _notInitialized('getSparkStatus');
68
73
  return _module.getSparkStatus(...args);
@@ -78,9 +83,9 @@ export function newRestChainService(...args) {
78
83
  return _module.newRestChainService(...args);
79
84
  }
80
85
 
81
- export function newSspConnectionManager(...args) {
82
- if (!_module) _notInitialized('newSspConnectionManager');
83
- return _module.newSspConnectionManager(...args);
86
+ export function newSharedSdkContext(...args) {
87
+ if (!_module) _notInitialized('newSharedSdkContext');
88
+ return _module.newSharedSdkContext(...args);
84
89
  }
85
90
 
86
91
  export function task_worker_entry_point(...args) {
@@ -163,17 +168,17 @@ export class SdkBuilder {
163
168
  }
164
169
  }
165
170
 
166
- export class SspConnectionManager {
171
+ export class TokenIssuer {
167
172
  constructor(...args) {
168
- if (!_module) _notInitialized('new SspConnectionManager');
169
- return new _module.SspConnectionManager(...args);
173
+ if (!_module) _notInitialized('new TokenIssuer');
174
+ return new _module.TokenIssuer(...args);
170
175
  }
171
176
  }
172
177
 
173
- export class TokenIssuer {
178
+ export class WasmSdkContext {
174
179
  constructor(...args) {
175
- if (!_module) _notInitialized('new TokenIssuer');
176
- return new _module.TokenIssuer(...args);
180
+ if (!_module) _notInitialized('new WasmSdkContext');
181
+ return new _module.WasmSdkContext(...args);
177
182
  }
178
183
  }
179
184