@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.
- package/breez-sdk-spark.tgz +0 -0
- package/bundler/breez_sdk_spark_wasm.d.ts +114 -40
- package/bundler/breez_sdk_spark_wasm.js +1 -1
- package/bundler/breez_sdk_spark_wasm_bg.js +118 -104
- package/bundler/breez_sdk_spark_wasm_bg.wasm +0 -0
- package/bundler/breez_sdk_spark_wasm_bg.wasm.d.ts +12 -11
- package/deno/breez_sdk_spark_wasm.d.ts +114 -40
- package/deno/breez_sdk_spark_wasm.js +118 -104
- package/deno/breez_sdk_spark_wasm_bg.wasm +0 -0
- package/deno/breez_sdk_spark_wasm_bg.wasm.d.ts +12 -11
- package/nodejs/breez_sdk_spark_wasm.d.ts +114 -40
- package/nodejs/breez_sdk_spark_wasm.js +121 -106
- package/nodejs/breez_sdk_spark_wasm_bg.wasm +0 -0
- package/nodejs/breez_sdk_spark_wasm_bg.wasm.d.ts +12 -11
- package/nodejs/index.mjs +3 -2
- package/nodejs/mysql-session-manager/index.cjs +26 -8
- package/nodejs/mysql-session-manager/migrations.cjs +40 -3
- package/nodejs/mysql-storage/index.cjs +67 -48
- package/nodejs/mysql-storage/migrations.cjs +220 -85
- package/nodejs/mysql-token-store/index.cjs +133 -68
- package/nodejs/mysql-token-store/migrations.cjs +309 -80
- package/nodejs/mysql-tree-store/index.cjs +76 -41
- package/nodejs/mysql-tree-store/migrations.cjs +254 -71
- package/nodejs/postgres-session-manager/index.cjs +27 -9
- package/nodejs/postgres-session-manager/migrations.cjs +45 -6
- package/nodejs/postgres-storage/index.cjs +81 -62
- package/nodejs/postgres-storage/migrations.cjs +207 -79
- package/nodejs/postgres-token-store/index.cjs +111 -67
- package/nodejs/postgres-token-store/migrations.cjs +153 -61
- package/nodejs/postgres-tree-store/index.cjs +60 -42
- package/nodejs/postgres-tree-store/migrations.cjs +130 -46
- package/package.json +1 -1
- package/ssr/index.js +14 -9
- package/web/breez_sdk_spark_wasm.d.ts +126 -51
- package/web/breez_sdk_spark_wasm.js +118 -104
- package/web/breez_sdk_spark_wasm_bg.wasm +0 -0
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
//
|
|
174
|
-
`ALTER TABLE
|
|
175
|
-
DROP CONSTRAINT IF EXISTS
|
|
176
|
-
|
|
177
|
-
//
|
|
178
|
-
`ALTER TABLE
|
|
179
|
-
`UPDATE
|
|
180
|
-
`ALTER TABLE
|
|
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
|
|
266
|
+
DROP CONSTRAINT IF EXISTS brz_tree_reservations_pkey,
|
|
183
267
|
ADD PRIMARY KEY (user_id, id)`,
|
|
184
268
|
|
|
185
|
-
//
|
|
186
|
-
`ALTER TABLE
|
|
187
|
-
`UPDATE
|
|
188
|
-
`ALTER TABLE
|
|
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
|
|
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
|
|
194
|
-
`DROP INDEX IF EXISTS
|
|
195
|
-
`DROP INDEX IF EXISTS
|
|
196
|
-
`DROP INDEX IF EXISTS
|
|
197
|
-
`CREATE INDEX
|
|
198
|
-
ON
|
|
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
|
|
201
|
-
ON
|
|
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
|
|
287
|
+
`CREATE INDEX brz_idx_tree_leaves_user_added_at ON brz_tree_leaves(user_id, added_at)`,
|
|
204
288
|
|
|
205
|
-
//
|
|
206
|
-
`ALTER TABLE
|
|
207
|
-
`UPDATE
|
|
208
|
-
`ALTER TABLE
|
|
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
|
|
294
|
+
DROP CONSTRAINT IF EXISTS brz_tree_spent_leaves_pkey,
|
|
211
295
|
ADD PRIMARY KEY (user_id, leaf_id)`,
|
|
212
296
|
|
|
213
|
-
//
|
|
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
|
|
216
|
-
`ALTER TABLE
|
|
217
|
-
`UPDATE
|
|
218
|
-
`ALTER TABLE
|
|
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
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
|
|
82
|
-
if (!_module) _notInitialized('
|
|
83
|
-
return _module.
|
|
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
|
|
171
|
+
export class TokenIssuer {
|
|
167
172
|
constructor(...args) {
|
|
168
|
-
if (!_module) _notInitialized('new
|
|
169
|
-
return new _module.
|
|
173
|
+
if (!_module) _notInitialized('new TokenIssuer');
|
|
174
|
+
return new _module.TokenIssuer(...args);
|
|
170
175
|
}
|
|
171
176
|
}
|
|
172
177
|
|
|
173
|
-
export class
|
|
178
|
+
export class WasmSdkContext {
|
|
174
179
|
constructor(...args) {
|
|
175
|
-
if (!_module) _notInitialized('new
|
|
176
|
-
return new _module.
|
|
180
|
+
if (!_module) _notInitialized('new WasmSdkContext');
|
|
181
|
+
return new _module.WasmSdkContext(...args);
|
|
177
182
|
}
|
|
178
183
|
}
|
|
179
184
|
|