@canton-network/core-signing-store-sql 0.12.0

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.js ADDED
@@ -0,0 +1,358 @@
1
+ import { assertConnected } from '@canton-network/core-wallet-auth';
2
+ import { Kysely, CamelCasePlugin, SqliteDialect } from 'kysely';
3
+ import Database from 'better-sqlite3';
4
+ import { z } from 'zod';
5
+ import { Umzug } from 'umzug';
6
+ import { Command } from 'commander';
7
+ import { pino } from 'pino';
8
+
9
+ var __defProp = Object.defineProperty;
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
12
+ var fromSigningKey = (key, userId, encrypt) => {
13
+ return {
14
+ id: key.id,
15
+ userId,
16
+ name: key.name,
17
+ publicKey: key.publicKey,
18
+ privateKey: key.privateKey ? key.privateKey : null,
19
+ metadata: key.metadata ? JSON.stringify(key.metadata) : null,
20
+ createdAt: key.createdAt.toISOString(),
21
+ updatedAt: key.updatedAt.toISOString()
22
+ };
23
+ };
24
+ var toSigningKey = (table, decrypt) => {
25
+ return {
26
+ id: table.id,
27
+ name: table.name,
28
+ publicKey: table.publicKey,
29
+ ...table.privateKey ? {
30
+ privateKey: table.privateKey
31
+ } : {},
32
+ createdAt: new Date(table.createdAt),
33
+ updatedAt: new Date(table.updatedAt),
34
+ ...table.metadata ? { metadata: JSON.parse(table.metadata) } : {}
35
+ };
36
+ };
37
+ var fromSigningTransaction = (transaction, userId) => {
38
+ return {
39
+ id: transaction.id,
40
+ userId,
41
+ hash: transaction.hash,
42
+ signature: transaction.signature || null,
43
+ publicKey: transaction.publicKey,
44
+ status: transaction.status,
45
+ metadata: transaction.metadata ? JSON.stringify(transaction.metadata) : null,
46
+ createdAt: transaction.createdAt.toISOString(),
47
+ updatedAt: transaction.updatedAt.toISOString()
48
+ };
49
+ };
50
+ var toSigningTransaction = (table) => {
51
+ return {
52
+ id: table.id,
53
+ hash: table.hash,
54
+ ...table.signature ? { signature: table.signature } : {},
55
+ publicKey: table.publicKey,
56
+ status: table.status,
57
+ ...table.metadata ? { metadata: JSON.parse(table.metadata) } : {},
58
+ createdAt: new Date(table.createdAt),
59
+ updatedAt: new Date(table.updatedAt)
60
+ };
61
+ };
62
+ var fromSigningDriverConfig = (config, userId) => {
63
+ return {
64
+ userId,
65
+ driverId: config.driverId,
66
+ config: JSON.stringify(config.config)
67
+ };
68
+ };
69
+ var toSigningDriverConfig = (table) => {
70
+ return {
71
+ driverId: table.driverId,
72
+ config: JSON.parse(table.config)
73
+ };
74
+ };
75
+ var storeConfigSchema = z.object({
76
+ connection: z.discriminatedUnion("type", [
77
+ z.object({
78
+ type: z.literal("memory")
79
+ }),
80
+ z.object({
81
+ type: z.literal("sqlite"),
82
+ database: z.string()
83
+ }),
84
+ z.object({
85
+ type: z.literal("postgres"),
86
+ host: z.string(),
87
+ port: z.number(),
88
+ user: z.string(),
89
+ password: z.string(),
90
+ database: z.string()
91
+ })
92
+ ])
93
+ });
94
+
95
+ // src/store-sql.ts
96
+ var StoreSql = class _StoreSql {
97
+ constructor(db, logger2, authContext) {
98
+ this.db = db;
99
+ this.logger = logger2;
100
+ __publicField(this, "authContext");
101
+ this.logger = logger2.child({ component: "StoreSql" });
102
+ this.authContext = authContext;
103
+ }
104
+ withAuthContext(context) {
105
+ return new _StoreSql(this.db, this.logger, context);
106
+ }
107
+ assertConnected() {
108
+ return assertConnected(this.authContext).userId;
109
+ }
110
+ // SigningDriverStore methods
111
+ async getSigningKey(userId, keyId) {
112
+ const result = await this.db.selectFrom("signingKeys").selectAll().where("userId", "=", userId).where("id", "=", keyId).executeTakeFirst();
113
+ return result ? toSigningKey(result) : void 0;
114
+ }
115
+ async getSigningKeyByPublicKey(publicKey) {
116
+ const result = await this.db.selectFrom("signingKeys").selectAll().where("publicKey", "=", publicKey).executeTakeFirst();
117
+ return result ? toSigningKey(result) : void 0;
118
+ }
119
+ async setSigningKey(userId, key) {
120
+ const serialized = fromSigningKey(key, userId);
121
+ console.log(
122
+ "setSigningKey - serialized data:",
123
+ JSON.stringify(serialized, null, 2)
124
+ );
125
+ console.log("setSigningKey - serialized types:", {
126
+ id: typeof serialized.id,
127
+ userId: typeof serialized.userId,
128
+ name: typeof serialized.name,
129
+ publicKey: typeof serialized.publicKey,
130
+ privateKey: typeof serialized.privateKey,
131
+ metadata: typeof serialized.metadata,
132
+ createdAt: typeof serialized.createdAt,
133
+ updatedAt: typeof serialized.updatedAt
134
+ });
135
+ await this.db.insertInto("signingKeys").values(serialized).onConflict(
136
+ (oc) => oc.columns(["userId", "id"]).doUpdateSet({
137
+ name: serialized.name,
138
+ publicKey: serialized.publicKey,
139
+ privateKey: serialized.privateKey,
140
+ metadata: serialized.metadata,
141
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
142
+ })
143
+ ).execute();
144
+ }
145
+ async deleteSigningKey(userId, keyId) {
146
+ await this.db.deleteFrom("signingKeys").where("userId", "=", userId).where("id", "=", keyId).execute();
147
+ }
148
+ async listSigningKeys(userId) {
149
+ const results = await this.db.selectFrom("signingKeys").selectAll().where("userId", "=", userId).orderBy("createdAt", "desc").execute();
150
+ return results.map((result) => toSigningKey(result));
151
+ }
152
+ async getSigningTransaction(userId, txId) {
153
+ const result = await this.db.selectFrom("signingTransactions").selectAll().where("userId", "=", userId).where("id", "=", txId).executeTakeFirst();
154
+ return result ? toSigningTransaction(result) : void 0;
155
+ }
156
+ async setSigningTransaction(userId, transaction) {
157
+ const serialized = fromSigningTransaction(transaction, userId);
158
+ await this.db.insertInto("signingTransactions").values(serialized).onConflict(
159
+ (oc) => oc.columns(["userId", "id"]).doUpdateSet({
160
+ hash: serialized.hash,
161
+ signature: serialized.signature,
162
+ publicKey: serialized.publicKey,
163
+ status: serialized.status,
164
+ metadata: serialized.metadata,
165
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
166
+ })
167
+ ).execute();
168
+ }
169
+ async updateSigningTransactionStatus(userId, txId, status) {
170
+ await this.db.updateTable("signingTransactions").set({ status, updatedAt: (/* @__PURE__ */ new Date()).toISOString() }).where("userId", "=", userId).where("id", "=", txId).execute();
171
+ }
172
+ async listSigningTransactions(userId, limit = 100, before) {
173
+ let query = this.db.selectFrom("signingTransactions").selectAll().where("userId", "=", userId).orderBy("createdAt", "desc").limit(limit);
174
+ if (before) {
175
+ const beforeTx = await this.getSigningTransaction(userId, before);
176
+ if (beforeTx) {
177
+ query = query.where(
178
+ "createdAt",
179
+ "<",
180
+ beforeTx.createdAt.toISOString()
181
+ );
182
+ }
183
+ }
184
+ const results = await query.execute();
185
+ return results.map(toSigningTransaction);
186
+ }
187
+ async listSigningTransactionsByTxIdsAndPublicKeys(txIds, publicKeys) {
188
+ const results = await this.db.selectFrom("signingTransactions").selectAll().where(
189
+ (eb) => eb.or([
190
+ eb("publicKey", "in", publicKeys),
191
+ eb("id", "in", txIds)
192
+ ])
193
+ ).execute();
194
+ return results.map(toSigningTransaction);
195
+ }
196
+ async getSigningDriverConfiguration(userId, driverId) {
197
+ const result = await this.db.selectFrom("signingDriverConfigs").selectAll().where("userId", "=", userId).where("driverId", "=", driverId).executeTakeFirst();
198
+ return result ? toSigningDriverConfig(result) : void 0;
199
+ }
200
+ async setSigningDriverConfiguration(userId, config) {
201
+ const serialized = fromSigningDriverConfig(config, userId);
202
+ await this.db.insertInto("signingDriverConfigs").values(serialized).onConflict(
203
+ (oc) => oc.columns(["userId", "driverId"]).doUpdateSet({
204
+ config: serialized.config
205
+ })
206
+ ).execute();
207
+ }
208
+ async setSigningKeys(userId, keys) {
209
+ if (keys.length === 0) return;
210
+ const serialized = keys.map((key) => fromSigningKey(key, userId));
211
+ await this.db.insertInto("signingKeys").values(serialized).onConflict(
212
+ (oc) => oc.columns(["userId", "id"]).doUpdateSet({
213
+ name: serialized[0].name,
214
+ publicKey: serialized[0].publicKey,
215
+ privateKey: serialized[0].privateKey,
216
+ metadata: serialized[0].metadata,
217
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
218
+ })
219
+ ).execute();
220
+ }
221
+ async setSigningTransactions(userId, transactions) {
222
+ if (transactions.length === 0) return;
223
+ const serialized = transactions.map(
224
+ (tx) => fromSigningTransaction(tx, userId)
225
+ );
226
+ await this.db.insertInto("signingTransactions").values(serialized).onConflict(
227
+ (oc) => oc.columns(["userId", "id"]).doUpdateSet({
228
+ hash: serialized[0].hash,
229
+ signature: serialized[0].signature,
230
+ publicKey: serialized[0].publicKey,
231
+ status: serialized[0].status,
232
+ metadata: serialized[0].metadata,
233
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
234
+ })
235
+ ).execute();
236
+ }
237
+ };
238
+ var connection = (config) => {
239
+ switch (config.connection.type) {
240
+ case "sqlite":
241
+ return new Kysely({
242
+ dialect: new SqliteDialect({
243
+ database: new Database(config.connection.database)
244
+ }),
245
+ plugins: [new CamelCasePlugin()]
246
+ });
247
+ case "memory":
248
+ return new Kysely({
249
+ dialect: new SqliteDialect({
250
+ database: new Database(":memory:")
251
+ }),
252
+ plugins: [new CamelCasePlugin()]
253
+ });
254
+ default:
255
+ throw new Error(
256
+ `Unsupported database type: ${config.connection.type}`
257
+ );
258
+ }
259
+ };
260
+ var KyselyStorage = class {
261
+ constructor(db) {
262
+ this.db = db;
263
+ }
264
+ async ensureTable() {
265
+ await this.db.schema.createTable("migrations").ifNotExists().addColumn("name", "text", (col) => col.primaryKey()).addColumn("executedAt", "text", (col) => col.notNull()).execute();
266
+ }
267
+ async executed() {
268
+ await this.ensureTable();
269
+ const rows = await this.db.selectFrom("migrations").select("name").execute();
270
+ return rows.map((r) => r.name);
271
+ }
272
+ async logMigration({ name }) {
273
+ await this.ensureTable();
274
+ await this.db.insertInto("migrations").values({ name, executedAt: (/* @__PURE__ */ new Date()).toISOString() }).execute();
275
+ }
276
+ async unlogMigration({ name }) {
277
+ await this.ensureTable();
278
+ await this.db.deleteFrom("migrations").where("name", "=", name).execute();
279
+ }
280
+ };
281
+ var migrator = (db) => {
282
+ const ext = import.meta.url.endsWith(".ts") ? "ts" : "js";
283
+ const glob = new URL(`./migrations/*.${ext}`, import.meta.url).pathname;
284
+ return new Umzug({
285
+ migrations: {
286
+ glob,
287
+ resolve: ({ name, path, context }) => {
288
+ return {
289
+ name,
290
+ up: async () => {
291
+ console.log(path);
292
+ const { up } = await import(path);
293
+ return up(context);
294
+ },
295
+ down: async () => {
296
+ const { down } = await import(path);
297
+ return down(context);
298
+ }
299
+ };
300
+ }
301
+ },
302
+ context: db,
303
+ storage: new KyselyStorage(db),
304
+ logger: console
305
+ });
306
+ };
307
+
308
+ // src/bootstrap.ts
309
+ async function bootstrap(db, config, logger2) {
310
+ new StoreSql(db, logger2);
311
+ }
312
+
313
+ // src/cli.ts
314
+ var logger = pino({ name: "main", level: "debug" });
315
+ function createCLI(config) {
316
+ const program = new Command();
317
+ program.command("up").description("Run all pending migrations").action(async () => {
318
+ const db = connection(config);
319
+ const umzug = migrator(db);
320
+ await umzug.up();
321
+ await db.destroy();
322
+ });
323
+ program.command("down").description("Rollback last migration").action(async () => {
324
+ const db = connection(config);
325
+ const umzug = migrator(db);
326
+ await umzug.down();
327
+ await db.destroy();
328
+ });
329
+ program.command("status").description("Show executed and pending migrations").action(async () => {
330
+ const db = connection(config);
331
+ const umzug = migrator(db);
332
+ const executed = await umzug.executed();
333
+ const pending = await umzug.pending();
334
+ console.log("Executed migrations:", executed);
335
+ console.log("Pending migrations:", pending);
336
+ await db.destroy();
337
+ });
338
+ program.command("reset").description("Rollback all migrations and reapply them").action(async () => {
339
+ const db = connection(config);
340
+ const umzug = migrator(db);
341
+ const executed = await umzug.executed();
342
+ for (const migration of executed.reverse()) {
343
+ await umzug.down({ to: migration.name });
344
+ }
345
+ await umzug.up();
346
+ await db.destroy();
347
+ });
348
+ program.command("bootstrap").description("Bootstrap DB from config").action(async () => {
349
+ const db = connection(config);
350
+ await bootstrap(db, config, logger);
351
+ await db.destroy();
352
+ });
353
+ return program;
354
+ }
355
+
356
+ export { StoreSql, bootstrap, connection, createCLI, migrator, storeConfigSchema };
357
+ //# sourceMappingURL=index.js.map
358
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema.ts","../src/store-sql.ts","../src/migrator.ts","../src/bootstrap.ts","../src/cli.ts"],"names":["logger"],"mappings":"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","file":"index.js","sourcesContent":["// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { UserId } from '@canton-network/core-wallet-auth'\nimport {\n SigningKey,\n SigningTransaction,\n SigningDriverConfig,\n SigningDriverStatus,\n} from '@canton-network/core-signing-lib'\nimport { z } from 'zod'\n\ninterface MigrationTable {\n name: string\n executedAt: string\n}\n\nexport interface SigningKeyTable {\n id: string\n userId: UserId\n name: string\n publicKey: string\n privateKey: string | null\n metadata: string | null\n createdAt: string\n updatedAt: string\n}\n\nexport interface SigningTransactionTable {\n id: string\n userId: UserId\n hash: string\n signature: string | null\n publicKey: string\n status: string\n metadata: string | null\n createdAt: string\n updatedAt: string\n}\n\nexport interface SigningDriverConfigTable {\n userId: UserId\n driverId: string\n config: string\n}\n\nexport interface DB {\n migrations: MigrationTable\n signingKeys: SigningKeyTable\n signingTransactions: SigningTransactionTable\n signingDriverConfigs: SigningDriverConfigTable\n}\n\n// Signing driver conversion functions\n\nexport const fromSigningKey = (\n key: SigningKey,\n userId: UserId,\n encrypt?: (data: string) => string\n): SigningKeyTable => {\n return {\n id: key.id,\n userId: userId,\n name: key.name,\n publicKey: key.publicKey,\n privateKey: key.privateKey\n ? encrypt\n ? encrypt(key.privateKey)\n : key.privateKey\n : null,\n metadata: key.metadata ? JSON.stringify(key.metadata) : null,\n createdAt: key.createdAt.toISOString(),\n updatedAt: key.updatedAt.toISOString(),\n }\n}\n\nexport const toSigningKey = (\n table: SigningKeyTable,\n decrypt?: (data: string) => string\n): SigningKey => {\n return {\n id: table.id,\n name: table.name,\n publicKey: table.publicKey,\n ...(table.privateKey\n ? {\n privateKey: decrypt\n ? decrypt(table.privateKey)\n : table.privateKey,\n }\n : {}),\n createdAt: new Date(table.createdAt),\n updatedAt: new Date(table.updatedAt),\n ...(table.metadata ? { metadata: JSON.parse(table.metadata) } : {}),\n }\n}\n\nexport const fromSigningTransaction = (\n transaction: SigningTransaction,\n userId: UserId\n): SigningTransactionTable => {\n return {\n id: transaction.id,\n userId: userId,\n hash: transaction.hash,\n signature: transaction.signature || null,\n publicKey: transaction.publicKey,\n status: transaction.status,\n metadata: transaction.metadata\n ? JSON.stringify(transaction.metadata)\n : null,\n createdAt: transaction.createdAt.toISOString(),\n updatedAt: transaction.updatedAt.toISOString(),\n }\n}\n\nexport const toSigningTransaction = (\n table: SigningTransactionTable\n): SigningTransaction => {\n return {\n id: table.id,\n hash: table.hash,\n ...(table.signature ? { signature: table.signature } : {}),\n publicKey: table.publicKey,\n status: table.status as SigningDriverStatus,\n ...(table.metadata ? { metadata: JSON.parse(table.metadata) } : {}),\n createdAt: new Date(table.createdAt),\n updatedAt: new Date(table.updatedAt),\n }\n}\n\nexport const fromSigningDriverConfig = (\n config: SigningDriverConfig,\n userId: UserId\n): SigningDriverConfigTable => {\n return {\n userId: userId,\n driverId: config.driverId,\n config: JSON.stringify(config.config),\n }\n}\n\nexport const toSigningDriverConfig = (\n table: SigningDriverConfigTable\n): SigningDriverConfig => {\n return {\n driverId: table.driverId,\n config: JSON.parse(table.config),\n }\n}\n\nexport const storeConfigSchema = z.object({\n connection: z.discriminatedUnion('type', [\n z.object({\n type: z.literal('memory'),\n }),\n z.object({\n type: z.literal('sqlite'),\n database: z.string(),\n }),\n z.object({\n type: z.literal('postgres'),\n host: z.string(),\n port: z.number(),\n user: z.string(),\n password: z.string(),\n database: z.string(),\n }),\n ]),\n})\n\nexport type StoreConfig = z.infer<typeof storeConfigSchema>\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Logger } from 'pino'\nimport {\n AuthContext,\n UserId,\n AuthAware,\n assertConnected,\n} from '@canton-network/core-wallet-auth'\nimport {\n SigningDriverStore,\n SigningKey,\n SigningTransaction,\n SigningDriverStatus,\n SigningDriverConfig,\n} from '@canton-network/core-signing-lib'\nimport { CamelCasePlugin, Kysely, SqliteDialect } from 'kysely'\nimport Database from 'better-sqlite3'\nimport {\n DB,\n fromSigningKey,\n toSigningKey,\n fromSigningTransaction,\n toSigningTransaction,\n fromSigningDriverConfig,\n toSigningDriverConfig,\n SigningKeyTable,\n StoreConfig,\n} from './schema.js'\n\nexport class StoreSql implements SigningDriverStore, AuthAware<StoreSql> {\n authContext: AuthContext | undefined\n\n constructor(\n private db: Kysely<DB>,\n private logger: Logger,\n authContext?: AuthContext\n ) {\n this.logger = logger.child({ component: 'StoreSql' })\n this.authContext = authContext\n }\n\n withAuthContext(context?: AuthContext): StoreSql {\n return new StoreSql(this.db, this.logger, context)\n }\n\n private assertConnected(): UserId {\n return assertConnected(this.authContext).userId\n }\n\n // SigningDriverStore methods\n async getSigningKey(\n userId: string,\n keyId: string\n ): Promise<SigningKey | undefined> {\n const result = await this.db\n .selectFrom('signingKeys')\n .selectAll()\n .where('userId', '=', userId)\n .where('id', '=', keyId)\n .executeTakeFirst()\n\n return result ? toSigningKey(result) : undefined\n }\n\n async getSigningKeyByPublicKey(\n publicKey: string\n ): Promise<SigningKey | undefined> {\n const result = await this.db\n .selectFrom('signingKeys')\n .selectAll()\n .where('publicKey', '=', publicKey)\n .executeTakeFirst()\n return result ? toSigningKey(result) : undefined\n }\n\n async setSigningKey(userId: string, key: SigningKey): Promise<void> {\n const serialized = fromSigningKey(key, userId)\n\n console.log(\n 'setSigningKey - serialized data:',\n JSON.stringify(serialized, null, 2)\n )\n console.log('setSigningKey - serialized types:', {\n id: typeof serialized.id,\n userId: typeof serialized.userId,\n name: typeof serialized.name,\n publicKey: typeof serialized.publicKey,\n privateKey: typeof serialized.privateKey,\n metadata: typeof serialized.metadata,\n createdAt: typeof serialized.createdAt,\n updatedAt: typeof serialized.updatedAt,\n })\n\n await this.db\n .insertInto('signingKeys')\n .values(serialized)\n .onConflict((oc) =>\n oc.columns(['userId', 'id']).doUpdateSet({\n name: serialized.name,\n publicKey: serialized.publicKey,\n privateKey: serialized.privateKey,\n metadata: serialized.metadata,\n updatedAt: new Date().toISOString(),\n })\n )\n .execute()\n }\n\n async deleteSigningKey(userId: string, keyId: string): Promise<void> {\n await this.db\n .deleteFrom('signingKeys')\n .where('userId', '=', userId)\n .where('id', '=', keyId)\n .execute()\n }\n\n async listSigningKeys(userId: string): Promise<SigningKey[]> {\n const results = await this.db\n .selectFrom('signingKeys')\n .selectAll()\n .where('userId', '=', userId)\n .orderBy('createdAt', 'desc')\n .execute()\n\n return results.map((result: SigningKeyTable) => toSigningKey(result))\n }\n\n async getSigningTransaction(\n userId: string,\n txId: string\n ): Promise<SigningTransaction | undefined> {\n const result = await this.db\n .selectFrom('signingTransactions')\n .selectAll()\n .where('userId', '=', userId)\n .where('id', '=', txId)\n .executeTakeFirst()\n\n return result ? toSigningTransaction(result) : undefined\n }\n\n async setSigningTransaction(\n userId: string,\n transaction: SigningTransaction\n ): Promise<void> {\n const serialized = fromSigningTransaction(transaction, userId)\n\n await this.db\n .insertInto('signingTransactions')\n .values(serialized)\n .onConflict((oc) =>\n oc.columns(['userId', 'id']).doUpdateSet({\n hash: serialized.hash,\n signature: serialized.signature,\n publicKey: serialized.publicKey,\n status: serialized.status,\n metadata: serialized.metadata,\n updatedAt: new Date().toISOString(),\n })\n )\n .execute()\n }\n\n async updateSigningTransactionStatus(\n userId: string,\n txId: string,\n status: SigningDriverStatus\n ): Promise<void> {\n await this.db\n .updateTable('signingTransactions')\n .set({ status, updatedAt: new Date().toISOString() })\n .where('userId', '=', userId)\n .where('id', '=', txId)\n .execute()\n }\n\n async listSigningTransactions(\n userId: string,\n limit: number = 100,\n before?: string\n ): Promise<SigningTransaction[]> {\n let query = this.db\n .selectFrom('signingTransactions')\n .selectAll()\n .where('userId', '=', userId)\n .orderBy('createdAt', 'desc')\n .limit(limit)\n\n if (before) {\n const beforeTx = await this.getSigningTransaction(userId, before)\n if (beforeTx) {\n query = query.where(\n 'createdAt',\n '<',\n beforeTx.createdAt.toISOString()\n )\n }\n }\n\n const results = await query.execute()\n return results.map(toSigningTransaction)\n }\n\n async listSigningTransactionsByTxIdsAndPublicKeys(\n txIds: string[],\n publicKeys: string[]\n ): Promise<SigningTransaction[]> {\n const results = await this.db\n .selectFrom('signingTransactions')\n .selectAll()\n .where((eb) =>\n eb.or([\n eb('publicKey', 'in', publicKeys),\n eb('id', 'in', txIds),\n ])\n )\n .execute()\n\n return results.map(toSigningTransaction)\n }\n\n async getSigningDriverConfiguration(\n userId: string,\n driverId: string\n ): Promise<SigningDriverConfig | undefined> {\n const result = await this.db\n .selectFrom('signingDriverConfigs')\n .selectAll()\n .where('userId', '=', userId)\n .where('driverId', '=', driverId)\n .executeTakeFirst()\n\n return result ? toSigningDriverConfig(result) : undefined\n }\n\n async setSigningDriverConfiguration(\n userId: string,\n config: SigningDriverConfig\n ): Promise<void> {\n const serialized = fromSigningDriverConfig(config, userId)\n\n await this.db\n .insertInto('signingDriverConfigs')\n .values(serialized)\n .onConflict((oc) =>\n oc.columns(['userId', 'driverId']).doUpdateSet({\n config: serialized.config,\n })\n )\n .execute()\n }\n\n async setSigningKeys(userId: string, keys: SigningKey[]): Promise<void> {\n if (keys.length === 0) return\n\n const serialized = keys.map((key) => fromSigningKey(key, userId))\n\n await this.db\n .insertInto('signingKeys')\n .values(serialized)\n .onConflict((oc) =>\n oc.columns(['userId', 'id']).doUpdateSet({\n name: serialized[0].name,\n publicKey: serialized[0].publicKey,\n privateKey: serialized[0].privateKey,\n metadata: serialized[0].metadata,\n updatedAt: new Date().toISOString(),\n })\n )\n .execute()\n }\n\n async setSigningTransactions(\n userId: string,\n transactions: SigningTransaction[]\n ): Promise<void> {\n if (transactions.length === 0) return\n\n const serialized = transactions.map((tx) =>\n fromSigningTransaction(tx, userId)\n )\n\n await this.db\n .insertInto('signingTransactions')\n .values(serialized)\n .onConflict((oc) =>\n oc.columns(['userId', 'id']).doUpdateSet({\n hash: serialized[0].hash,\n signature: serialized[0].signature,\n publicKey: serialized[0].publicKey,\n status: serialized[0].status,\n metadata: serialized[0].metadata,\n updatedAt: new Date().toISOString(),\n })\n )\n .execute()\n }\n}\n\nexport const connection = (config: StoreConfig) => {\n switch (config.connection.type) {\n case 'sqlite':\n return new Kysely<DB>({\n dialect: new SqliteDialect({\n database: new Database(config.connection.database),\n }),\n plugins: [new CamelCasePlugin()],\n })\n case 'memory':\n return new Kysely<DB>({\n dialect: new SqliteDialect({\n database: new Database(':memory:'),\n }),\n plugins: [new CamelCasePlugin()],\n })\n default:\n throw new Error(\n `Unsupported database type: ${config.connection.type}`\n )\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Umzug, MigrationMeta, UmzugStorage } from 'umzug'\nimport { Kysely } from 'kysely'\nimport { DB } from './schema'\n\nclass KyselyStorage implements UmzugStorage {\n constructor(private db: Kysely<DB>) {}\n\n private async ensureTable() {\n await this.db.schema\n .createTable('migrations')\n .ifNotExists()\n .addColumn('name', 'text', (col) => col.primaryKey())\n .addColumn('executedAt', 'text', (col) => col.notNull())\n .execute()\n }\n\n async executed(): Promise<string[]> {\n await this.ensureTable()\n const rows = await this.db\n .selectFrom('migrations')\n .select('name')\n .execute()\n return rows.map((r) => r.name)\n }\n\n async logMigration({ name }: MigrationMeta): Promise<void> {\n await this.ensureTable()\n await this.db\n .insertInto('migrations')\n .values({ name, executedAt: new Date().toISOString() })\n .execute()\n }\n\n async unlogMigration({ name }: MigrationMeta): Promise<void> {\n await this.ensureTable()\n await this.db\n .deleteFrom('migrations')\n .where('name', '=', name)\n .execute()\n }\n}\n\nexport const migrator = (db: Kysely<DB>) => {\n const ext = import.meta.url.endsWith('.ts') ? 'ts' : 'js'\n const glob = new URL(`./migrations/*.${ext}`, import.meta.url).pathname\n return new Umzug({\n migrations: {\n glob: glob,\n resolve: ({ name, path, context }) => {\n // Dynamic import for ESM\n return {\n name,\n up: async () => {\n console.log(path)\n const { up } = await import(path!)\n return up(context)\n },\n down: async () => {\n const { down } = await import(path!)\n return down(context)\n },\n }\n },\n },\n context: db,\n storage: new KyselyStorage(db),\n logger: console,\n })\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Kysely } from 'kysely'\nimport { StoreSql } from './store-sql.js'\nimport { StoreConfig } from '@canton-network/core-wallet-store'\nimport { Logger } from 'pino'\nimport { DB } from './schema'\n\nexport async function bootstrap(\n db: Kysely<DB>,\n config: StoreConfig,\n logger: Logger\n): Promise<void> {\n new StoreSql(db, logger)\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Command } from 'commander'\nimport { connection } from './store-sql.js'\nimport { migrator } from './migrator.js'\nimport type { StoreConfig } from '@canton-network/core-wallet-store'\nimport { pino } from 'pino'\nimport { bootstrap } from './bootstrap.js'\n\nconst logger = pino({ name: 'main', level: 'debug' })\n\nexport function createCLI(config: StoreConfig): Command {\n const program = new Command()\n\n program\n .command('up')\n .description('Run all pending migrations')\n .action(async () => {\n const db = connection(config)\n const umzug = migrator(db)\n await umzug.up()\n await db.destroy()\n })\n\n program\n .command('down')\n .description('Rollback last migration')\n .action(async () => {\n const db = connection(config)\n const umzug = migrator(db)\n await umzug.down()\n await db.destroy()\n })\n\n program\n .command('status')\n .description('Show executed and pending migrations')\n .action(async () => {\n const db = connection(config)\n const umzug = migrator(db)\n const executed = await umzug.executed()\n const pending = await umzug.pending()\n\n console.log('Executed migrations:', executed)\n console.log('Pending migrations:', pending)\n\n await db.destroy()\n })\n\n program\n .command('reset')\n .description('Rollback all migrations and reapply them')\n .action(async () => {\n const db = connection(config)\n const umzug = migrator(db)\n const executed = await umzug.executed()\n\n // Rollback all executed migrations in reverse order\n for (const migration of executed.reverse()) {\n await umzug.down({ to: migration.name })\n }\n\n // Reapply all migrations\n await umzug.up()\n await db.destroy()\n })\n\n program\n .command('bootstrap')\n .description('Bootstrap DB from config')\n .action(async () => {\n const db = connection(config)\n await bootstrap(db, config, logger)\n await db.destroy()\n })\n\n return program\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { Kysely } from 'kysely';
2
+ import { DB } from '../schema.js';
3
+ export declare function up(db: Kysely<DB>): Promise<void>;
4
+ export declare function down(db: Kysely<DB>): Promise<void>;
5
+ //# sourceMappingURL=001-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"001-init.d.ts","sourceRoot":"","sources":["../../src/migrations/001-init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,wBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFtD;AAED,wBAAsB,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxD"}
@@ -0,0 +1,83 @@
1
+ // Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ export async function up(db) {
4
+ console.log('Running signing drivers migration...');
5
+ // --- signing_keys ---
6
+ await db.schema
7
+ .createTable('signing_keys')
8
+ .ifNotExists()
9
+ .addColumn('id', 'text', (col) => col.primaryKey())
10
+ .addColumn('user_id', 'text', (col) => col.notNull())
11
+ .addColumn('name', 'text', (col) => col.notNull())
12
+ .addColumn('public_key', 'text', (col) => col.notNull())
13
+ .addColumn('private_key', 'text') // Encrypted for internal driver
14
+ .addColumn('metadata', 'text') // JSON string for driver-specific data
15
+ .addColumn('created_at', 'integer', (col) => col.notNull())
16
+ .addColumn('updated_at', 'integer', (col) => col.notNull())
17
+ .addUniqueConstraint('signing_keys_user_id_id_unique', [
18
+ 'user_id',
19
+ 'id',
20
+ ])
21
+ .execute();
22
+ // --- signing_transactions ---
23
+ await db.schema
24
+ .createTable('signing_transactions')
25
+ .ifNotExists()
26
+ .addColumn('id', 'text', (col) => col.primaryKey())
27
+ .addColumn('user_id', 'text', (col) => col.notNull())
28
+ .addColumn('hash', 'text', (col) => col.notNull())
29
+ .addColumn('signature', 'text')
30
+ .addColumn('public_key', 'text', (col) => col.notNull())
31
+ .addColumn('status', 'text', (col) => col.notNull())
32
+ .addColumn('metadata', 'text') // JSON string for driver-specific data
33
+ .addColumn('created_at', 'integer', (col) => col.notNull())
34
+ .addColumn('updated_at', 'integer', (col) => col.notNull())
35
+ .addUniqueConstraint('signing_transactions_user_id_id_unique', [
36
+ 'user_id',
37
+ 'id',
38
+ ])
39
+ .execute();
40
+ // --- signing_driver_configs ---
41
+ await db.schema
42
+ .createTable('signing_driver_configs')
43
+ .ifNotExists()
44
+ .addColumn('user_id', 'text', (col) => col.notNull())
45
+ .addColumn('driver_id', 'text', (col) => col.notNull())
46
+ .addColumn('config', 'text', (col) => col.notNull()) // JSON string
47
+ .addPrimaryKeyConstraint('signing_driver_configs_pk', [
48
+ 'user_id',
49
+ 'driver_id',
50
+ ])
51
+ .execute();
52
+ // Create indexes for performance
53
+ await db.schema
54
+ .createIndex('idx_signing_keys_user_id')
55
+ .on('signing_keys')
56
+ .column('user_id')
57
+ .execute();
58
+ await db.schema
59
+ .createIndex('idx_signing_keys_public_key')
60
+ .on('signing_keys')
61
+ .column('public_key')
62
+ .execute();
63
+ await db.schema
64
+ .createIndex('idx_signing_transactions_user_id')
65
+ .on('signing_transactions')
66
+ .column('user_id')
67
+ .execute();
68
+ await db.schema
69
+ .createIndex('idx_signing_transactions_status')
70
+ .on('signing_transactions')
71
+ .column('status')
72
+ .execute();
73
+ await db.schema
74
+ .createIndex('idx_signing_transactions_created_at')
75
+ .on('signing_transactions')
76
+ .column('created_at')
77
+ .execute();
78
+ }
79
+ export async function down(db) {
80
+ await db.schema.dropTable('signing_driver_configs').ifExists().execute();
81
+ await db.schema.dropTable('signing_transactions').ifExists().execute();
82
+ await db.schema.dropTable('signing_keys').ifExists().execute();
83
+ }
@@ -0,0 +1,5 @@
1
+ import { Umzug } from 'umzug';
2
+ import { Kysely } from 'kysely';
3
+ import { DB } from './schema';
4
+ export declare const migrator: (db: Kysely<DB>) => Umzug<Kysely<DB>>;
5
+ //# sourceMappingURL=migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../src/migrator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAA+B,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAA;AAwC7B,eAAO,MAAM,QAAQ,GAAI,IAAI,MAAM,CAAC,EAAE,CAAC,sBA0BtC,CAAA"}
@@ -0,0 +1,115 @@
1
+ import { UserId } from '@canton-network/core-wallet-auth';
2
+ import { SigningKey, SigningTransaction, SigningDriverConfig } from '@canton-network/core-signing-lib';
3
+ import { z } from 'zod';
4
+ interface MigrationTable {
5
+ name: string;
6
+ executedAt: string;
7
+ }
8
+ export interface SigningKeyTable {
9
+ id: string;
10
+ userId: UserId;
11
+ name: string;
12
+ publicKey: string;
13
+ privateKey: string | null;
14
+ metadata: string | null;
15
+ createdAt: string;
16
+ updatedAt: string;
17
+ }
18
+ export interface SigningTransactionTable {
19
+ id: string;
20
+ userId: UserId;
21
+ hash: string;
22
+ signature: string | null;
23
+ publicKey: string;
24
+ status: string;
25
+ metadata: string | null;
26
+ createdAt: string;
27
+ updatedAt: string;
28
+ }
29
+ export interface SigningDriverConfigTable {
30
+ userId: UserId;
31
+ driverId: string;
32
+ config: string;
33
+ }
34
+ export interface DB {
35
+ migrations: MigrationTable;
36
+ signingKeys: SigningKeyTable;
37
+ signingTransactions: SigningTransactionTable;
38
+ signingDriverConfigs: SigningDriverConfigTable;
39
+ }
40
+ export declare const fromSigningKey: (key: SigningKey, userId: UserId, encrypt?: (data: string) => string) => SigningKeyTable;
41
+ export declare const toSigningKey: (table: SigningKeyTable, decrypt?: (data: string) => string) => SigningKey;
42
+ export declare const fromSigningTransaction: (transaction: SigningTransaction, userId: UserId) => SigningTransactionTable;
43
+ export declare const toSigningTransaction: (table: SigningTransactionTable) => SigningTransaction;
44
+ export declare const fromSigningDriverConfig: (config: SigningDriverConfig, userId: UserId) => SigningDriverConfigTable;
45
+ export declare const toSigningDriverConfig: (table: SigningDriverConfigTable) => SigningDriverConfig;
46
+ export declare const storeConfigSchema: z.ZodObject<{
47
+ connection: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
48
+ type: z.ZodLiteral<"memory">;
49
+ }, "strip", z.ZodTypeAny, {
50
+ type: "memory";
51
+ }, {
52
+ type: "memory";
53
+ }>, z.ZodObject<{
54
+ type: z.ZodLiteral<"sqlite">;
55
+ database: z.ZodString;
56
+ }, "strip", z.ZodTypeAny, {
57
+ type: "sqlite";
58
+ database: string;
59
+ }, {
60
+ type: "sqlite";
61
+ database: string;
62
+ }>, z.ZodObject<{
63
+ type: z.ZodLiteral<"postgres">;
64
+ host: z.ZodString;
65
+ port: z.ZodNumber;
66
+ user: z.ZodString;
67
+ password: z.ZodString;
68
+ database: z.ZodString;
69
+ }, "strip", z.ZodTypeAny, {
70
+ type: "postgres";
71
+ database: string;
72
+ host: string;
73
+ port: number;
74
+ user: string;
75
+ password: string;
76
+ }, {
77
+ type: "postgres";
78
+ database: string;
79
+ host: string;
80
+ port: number;
81
+ user: string;
82
+ password: string;
83
+ }>]>;
84
+ }, "strip", z.ZodTypeAny, {
85
+ connection: {
86
+ type: "memory";
87
+ } | {
88
+ type: "sqlite";
89
+ database: string;
90
+ } | {
91
+ type: "postgres";
92
+ database: string;
93
+ host: string;
94
+ port: number;
95
+ user: string;
96
+ password: string;
97
+ };
98
+ }, {
99
+ connection: {
100
+ type: "memory";
101
+ } | {
102
+ type: "sqlite";
103
+ database: string;
104
+ } | {
105
+ type: "postgres";
106
+ database: string;
107
+ host: string;
108
+ port: number;
109
+ user: string;
110
+ password: string;
111
+ };
112
+ }>;
113
+ export type StoreConfig = z.infer<typeof storeConfigSchema>;
114
+ export {};
115
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EACH,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EAEtB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,uBAAuB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,EAAE;IACf,UAAU,EAAE,cAAc,CAAA;IAC1B,WAAW,EAAE,eAAe,CAAA;IAC5B,mBAAmB,EAAE,uBAAuB,CAAA;IAC5C,oBAAoB,EAAE,wBAAwB,CAAA;CACjD;AAID,eAAO,MAAM,cAAc,GACvB,KAAK,UAAU,EACf,QAAQ,MAAM,EACd,UAAU,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,KACnC,eAeF,CAAA;AAED,eAAO,MAAM,YAAY,GACrB,OAAO,eAAe,EACtB,UAAU,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,KACnC,UAgBF,CAAA;AAED,eAAO,MAAM,sBAAsB,GAC/B,aAAa,kBAAkB,EAC/B,QAAQ,MAAM,KACf,uBAcF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC7B,OAAO,uBAAuB,KAC/B,kBAWF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAChC,QAAQ,mBAAmB,EAC3B,QAAQ,MAAM,KACf,wBAMF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAC9B,OAAO,wBAAwB,KAChC,mBAKF,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA"}