diff --git a/packages/cheqd/src/dids/didCheqdUtil.ts b/packages/cheqd/src/dids/didCheqdUtil.ts index a0a10a3bd8..c0dc82f30b 100644 --- a/packages/cheqd/src/dids/didCheqdUtil.ts +++ b/packages/cheqd/src/dids/didCheqdUtil.ts @@ -114,14 +114,24 @@ export interface IDidDocOptions { } export function getClosestResourceVersion(resources: Metadata[], date: Date) { - const result = [...resources].sort((a, b) => { - if (!a.created || !b.created) throw new CredoError("Missing required property 'created' on resource") - const distancea = Math.abs(date.getTime() - a.created.getTime()) - const distanceb = Math.abs(date.getTime() - b.created.getTime()) - return distancea - distanceb - }) + let minDiff = Number.POSITIVE_INFINITY + let closest: Metadata | undefined = undefined + + // TODO: if the cheqd/sdk returns sorted resources, change this to binary search + for (const resource of resources) { + if (!resource.created) throw new CredoError("Missing required property 'created' on resource") + + if (resource.created.getTime() < date.getTime()) { + const diff = date.getTime() - resource.created.getTime() + + if (diff < minDiff) { + closest = resource + minDiff = diff + } + } + } - return result[0] + return closest } export function filterResourcesByNameAndType(resources: Metadata[], name: string, type: string) { diff --git a/packages/cheqd/tests/cheqd-did-resolver.e2e.test.ts b/packages/cheqd/tests/cheqd-did-resolver.e2e.test.ts index 95499f7f42..051ce45f27 100644 --- a/packages/cheqd/tests/cheqd-did-resolver.e2e.test.ts +++ b/packages/cheqd/tests/cheqd-did-resolver.e2e.test.ts @@ -116,13 +116,11 @@ describe('Cheqd DID resolver', () => { id: resourceResult3.resourceState.resourceId, }) - // Date in past should match first created resource + // Date in past should return undefined resource = getClosestResourceVersion( didResult.didDocumentMetadata.linkedResourceMetadata, new Date('2022-11-16T10:56:34Z') ) - expect(resource).toMatchObject({ - id: resourceResult1.resourceState.resourceId, - }) + expect(resource).toBeUndefined() }) })