UNPKG

@veramo/data-store

Version:

Veramo data storage plugin based on TypeORM database drivers

85 lines 3.41 kB
import { Table, TableColumn } from 'typeorm'; import { PrivateKey } from '../index.js'; import { PreMigrationKey } from '../entities/PreMigrationEntities.js'; import Debug from 'debug'; import { migrationGetExistingTableByName, migrationGetTableName } from './migration-functions.js'; const debug = Debug('veramo:data-store:migrate-private-keys'); /** * Migration of existing private keys from Veramo 2.x to Veramo 3.x * * @public */ export class CreatePrivateKeyStorage1629293428674 { name = 'CreatePrivateKeyStorage1629293428674'; // Used in case this class gets minified, which would change the classname async up(queryRunner) { // 1.create new table debug(`creating new private-key table`); await queryRunner.createTable(new Table({ name: migrationGetTableName(queryRunner, 'private-key'), columns: [ { name: 'alias', type: 'varchar', isPrimary: true, }, { name: 'type', type: 'varchar', }, { name: 'privateKeyHex', type: 'varchar', }, ], }), true); // 2. copy key data const keys = await queryRunner.manager.find(PreMigrationKey); debug(`got ${keys.length} potential keys to migrate`); const privKeys = keys .filter((key) => typeof key.privateKeyHex !== 'undefined' && key.privateKeyHex !== null) .map((key) => ({ alias: key.kid, type: key.type, privateKeyHex: key.privateKeyHex, })); debug(`${privKeys.length} keys need to be migrated`); await queryRunner.manager .createQueryBuilder() .insert() .into(migrationGetTableName(queryRunner, 'private-key')) .values(privKeys) .execute(); // 3. drop old column debug(`dropping privKeyHex column from old key table`); await queryRunner.dropColumn(migrationGetExistingTableByName(queryRunner, 'PreMigrationKey', true), 'privateKeyHex'); //4. done debug(`migrated ${privKeys.length} keys to private key storage`); } async down(queryRunner) { // 1. add old column back debug(`adding back privateKeyHex column to key table`); await queryRunner.addColumn('key', new TableColumn({ name: 'privateKeyHex', type: 'varchar', isNullable: true, })); // 2. copy key data debug(`checking keys to be rolled back`); const keys = await queryRunner.manager.find(PrivateKey); debug(`copying ${keys.length} keys`); for (const key of keys) { await queryRunner.manager .createQueryBuilder() .update(PreMigrationKey) .set({ privateKeyHex: key.privateKeyHex }) .where('kid = :alias', { alias: key.alias }) .execute(); } debug(`dropping private-key table`); // 3. drop the new private key table await queryRunner.dropTable(migrationGetExistingTableByName(queryRunner, 'private-key')); // 4. done debug(`rolled back ${keys.length} keys`); } } //# sourceMappingURL=3.createPrivateKeyStorage.js.map