chore: fix issue with keystore

Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
blam
2024-11-27 11:08:00 +01:00
parent 882ecd5b03
commit 77767faed7
2 changed files with 36 additions and 14 deletions
@@ -24,7 +24,9 @@ import {
} from './FirestoreKeyStore';
import { AnyJWK } from './types';
const data = jest.fn().mockReturnValue('data');
const data = jest
.fn()
.mockReturnValue({ key: { kid: 'something' }, kid: 'something' });
const toDate = jest.fn().mockReturnValue('date');
const get = jest.fn().mockReturnValue({
docs: [{ data, createTime: { toDate } }],
@@ -145,7 +147,7 @@ describe('FirestoreKeyStore', () => {
expect(firestoreMock.doc).toHaveBeenCalledWith(key.kid);
expect(firestoreMock.set).toHaveBeenCalledWith({
kid: key.kid,
key: JSON.stringify(key),
key,
});
});
@@ -180,7 +182,26 @@ describe('FirestoreKeyStore', () => {
expect(data).toHaveBeenCalledTimes(1);
expect(toDate).toHaveBeenCalledTimes(1);
expect(items).toMatchObject({
items: [{ key: 'data', createdAt: 'date' }],
items: [{ key: { kid: 'something' }, createdAt: 'date' }],
});
});
it('supports older string versions of the keys', async () => {
data.mockReturnValue({
key: JSON.stringify({ kid: 'something' }),
kid: 'something',
});
const keyStore = await FirestoreKeyStore.create(firestoreSettings);
const items = await keyStore.listKeys();
expect(setTimeout).toHaveBeenCalledTimes(1);
expect(firestoreMock.collection).toHaveBeenCalledWith(path);
expect(firestoreMock.get).toHaveBeenCalledTimes(1);
expect(data).toHaveBeenCalledTimes(1);
expect(toDate).toHaveBeenCalledTimes(1);
expect(items).toMatchObject({
items: [{ key: { kid: 'something' }, createdAt: 'date' }],
});
});
});
@@ -75,13 +75,10 @@ export class FirestoreKeyStore implements KeyStore {
async addKey(key: AnyJWK): Promise<void> {
await this.withTimeout<WriteResult>(
this.database
.collection(this.path)
.doc(key.kid)
.set({
kid: key.kid,
key: JSON.stringify(key),
}),
this.database.collection(this.path).doc(key.kid).set({
kid: key.kid,
key: key,
}),
);
}
@@ -91,10 +88,14 @@ export class FirestoreKeyStore implements KeyStore {
);
return {
items: keys.docs.map(key => ({
key: key.data() as AnyJWK,
createdAt: key.createTime.toDate(),
})),
items: keys.docs.map(doc => {
const { key } = doc.data();
return {
createdAt: doc.createTime.toDate(),
key: typeof key === 'string' ? JSON.parse(key) : key,
};
}),
};
}