feat: Persist created key to database in create_new_key

- Use Prisma to upsert key details upon creation.
- Add database mocking for related unit tests.
- Ensure `create_new_key` saves keyName and pubkey for future operations.
This commit is contained in:
tcheeric 2025-11-26 16:34:36 +00:00
parent 7ed4835bda
commit dc86897db4
3 changed files with 34 additions and 1 deletions

View File

@ -1,5 +1,5 @@
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { createMockAdmin, createMockRequest, getResponseResult, resetMocks } from './test-utils';
import { createMockAdmin, createMockRequest, getResponseResult, resetMocks, mockPrisma } from './test-utils';
// Mock the saveEncrypted function
vi.mock('../../../../commands/add.js', () => ({
@ -11,6 +11,11 @@ vi.mock('../../../lib/profile.js', () => ({
setupSkeletonProfile: vi.fn(),
}));
// Mock the prisma module
vi.mock('../../../../db.js', () => ({
default: mockPrisma,
}));
import createNewKey from '../create_new_key';
describe('create_new_key', () => {
@ -51,6 +56,19 @@ describe('create_new_key', () => {
expect.stringMatching(/^nsec1/)
);
// Verify key was saved to database
expect(mockPrisma.key.upsert).toHaveBeenCalledWith({
where: { keyName: 'my-key' },
update: {
pubkey: expect.any(String),
deletedAt: null,
},
create: {
keyName: 'my-key',
pubkey: expect.any(String),
},
});
// Verify response contains npub
expect(admin.rpc.sendResponse).toHaveBeenCalledTimes(1);
const result = getResponseResult(admin);

View File

@ -9,6 +9,7 @@ export const mockPrisma = {
findMany: vi.fn(),
create: vi.fn(),
update: vi.fn(),
upsert: vi.fn(),
delete: vi.fn(),
},
keyUser: {

View File

@ -4,6 +4,7 @@ import { saveEncrypted } from "../../../commands/add.js";
import { nip19 } from 'nostr-tools';
import { setupSkeletonProfile } from "../../lib/profile.js";
import { bytesToHex, hexToBytes } from "../../../utils/hex.js";
import prisma from "../../../db.js";
export default async function createNewKey(admin: AdminInterface, req: NDKRpcRequest) {
const [ keyName, passphrase, _nsec ] = req.params as [ string, string, string? ];
@ -35,6 +36,19 @@ export default async function createNewKey(admin: AdminInterface, req: NDKRpcReq
await admin.loadNsec(keyName, nsec);
// Also save to database so delete_key can find it
await prisma.key.upsert({
where: { keyName },
update: {
pubkey: user.pubkey,
deletedAt: null, // Ensure it's not marked as deleted
},
create: {
keyName,
pubkey: user.pubkey,
},
});
const result = JSON.stringify({
npub: user.npub,
});