Skip to content

Commit 66aa78f

Browse files
committed
chore: remove timestamp from receipt
1 parent 8936257 commit 66aa78f

15 files changed

Lines changed: 118 additions & 210 deletions

File tree

data/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
*.json
22
*.db
3+
*.db-journal
34
ipfs/
45
mongodb/
56
redis/

packages/keymaster/src/keymaster.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2159,7 +2159,7 @@ export default class Keymaster implements KeymasterInterface {
21592159
responseDID: string,
21602160
options: BuildChallengeReceiptOptions = {}
21612161
): Promise<ChallengeReceipt[]> {
2162-
const { verification, verifiedAt, retries, delay } = options;
2162+
const { verification, retries, delay } = options;
21632163
const response = verification ?? await this.verifyResponse(responseDID, { retries, delay });
21642164

21652165
if (!response.match) {
@@ -2170,10 +2170,6 @@ export default class Keymaster implements KeymasterInterface {
21702170
throw new InvalidParameterError('response.responseNonce');
21712171
}
21722172

2173-
if (verifiedAt && isNaN(new Date(verifiedAt).getTime())) {
2174-
throw new InvalidParameterError('options.verifiedAt');
2175-
}
2176-
21772173
const challengeDoc = await this.resolveDID(response.challenge);
21782174
const requesterDid = challengeDoc.didDocument?.controller;
21792175
if (!requesterDid) {
@@ -2196,9 +2192,6 @@ export default class Keymaster implements KeymasterInterface {
21962192
throw new InvalidParameterError('verification.vps');
21972193
}
21982194

2199-
const timestamp = verifiedAt
2200-
? new Date(verifiedAt).toISOString()
2201-
: new Date().toISOString();
22022195
const responseCommitment = this.createResponseCommitment(responseDID, response.responseNonce);
22032196
const receipts: ChallengeReceipt[] = [];
22042197

@@ -2217,7 +2210,6 @@ export default class Keymaster implements KeymasterInterface {
22172210
attesterDid: vp.issuer,
22182211
schemaDid,
22192212
requesterDid,
2220-
verifiedAt: timestamp,
22212213
responseCommitment,
22222214
});
22232215
}

packages/keymaster/src/types.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,11 @@ export interface ChallengeReceipt {
145145
attesterDid: string;
146146
schemaDid: string;
147147
requesterDid: string;
148-
verifiedAt: string;
149148
responseCommitment: string;
150149
}
151150

152151
export interface BuildChallengeReceiptOptions {
153152
verification?: ChallengeResponse;
154-
verifiedAt?: string;
155153
retries?: number;
156154
delay?: number;
157155
}

services/explorer/src/components/ChallengeReceipts.tsx

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,15 @@ interface ChallengeReceiptUsageRow {
2929
schemaDid: string;
3030
requesterDid: string;
3131
count: number;
32-
firstVerifiedAt: string;
33-
lastVerifiedAt: string;
32+
firstUpdatedAt: string;
33+
lastUpdatedAt: string;
3434
}
3535

3636
interface ChallengeReceiptRow {
3737
receiptDid: string;
3838
attesterDid: string;
3939
schemaDid: string;
4040
requesterDid: string;
41-
verifiedAt: string;
4241
responseCommitment: string;
4342
updatedAt: string;
4443
}
@@ -48,8 +47,8 @@ interface AttesterUsageRow {
4847
count: number;
4948
templateCount: number;
5049
requesterCount: number;
51-
firstVerifiedAt: string;
52-
lastVerifiedAt: string;
50+
firstUpdatedAt: string;
51+
lastUpdatedAt: string;
5352
}
5453

5554
function parsePositiveInteger(value: string | null, fallback: number): number {
@@ -106,8 +105,8 @@ function mapUsageRow(row: any): ChallengeReceiptUsageRow {
106105
schemaDid: row.schemaDid,
107106
requesterDid: row.requesterDid,
108107
count: Number(row.count ?? 0),
109-
firstVerifiedAt: row.firstVerifiedAt,
110-
lastVerifiedAt: row.lastVerifiedAt,
108+
firstUpdatedAt: row.firstUpdatedAt,
109+
lastUpdatedAt: row.lastUpdatedAt,
111110
};
112111
}
113112

@@ -117,7 +116,6 @@ function mapReceiptRow(row: any): ChallengeReceiptRow {
117116
attesterDid: row.attesterDid,
118117
schemaDid: row.schemaDid,
119118
requesterDid: row.requesterDid,
120-
verifiedAt: row.verifiedAt,
121119
responseCommitment: row.responseCommitment,
122120
updatedAt: row.updatedAt,
123121
};
@@ -252,8 +250,8 @@ function groupReceiptsByAttester(receipts: ChallengeReceiptRow[]): AttesterUsage
252250
count: 1,
253251
templateCount: 1,
254252
requesterCount: 1,
255-
firstVerifiedAt: receipt.verifiedAt,
256-
lastVerifiedAt: receipt.verifiedAt,
253+
firstUpdatedAt: receipt.updatedAt,
254+
lastUpdatedAt: receipt.updatedAt,
257255
},
258256
});
259257
continue;
@@ -266,11 +264,11 @@ function groupReceiptsByAttester(receipts: ChallengeReceiptRow[]): AttesterUsage
266264
existing.row.requesterCount = existing.requesters.size;
267265
existing.row.templateCount = existing.templates.size;
268266

269-
if (receipt.verifiedAt < existing.row.firstVerifiedAt) {
270-
existing.row.firstVerifiedAt = receipt.verifiedAt;
267+
if (receipt.updatedAt < existing.row.firstUpdatedAt) {
268+
existing.row.firstUpdatedAt = receipt.updatedAt;
271269
}
272-
if (receipt.verifiedAt > existing.row.lastVerifiedAt) {
273-
existing.row.lastVerifiedAt = receipt.verifiedAt;
270+
if (receipt.updatedAt > existing.row.lastUpdatedAt) {
271+
existing.row.lastUpdatedAt = receipt.updatedAt;
274272
}
275273
}
276274

@@ -302,8 +300,8 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
302300
const receiptPageSize = parsePositiveInteger(searchParams.get("receiptPageSize"), 25);
303301
const receiptPage = parseNonNegativeInteger(searchParams.get("receiptPage"), 0);
304302

305-
const verifiedAfter = useMemo(() => getStartOfDay(dateFrom), [dateFrom]);
306-
const verifiedBefore = useMemo(() => getEndOfDay(dateTo), [dateTo]);
303+
const updatedAfter = useMemo(() => getStartOfDay(dateFrom), [dateFrom]);
304+
const updatedBefore = useMemo(() => getEndOfDay(dateTo), [dateTo]);
307305

308306
const filteredAttesterRows = useMemo(() => {
309307
const query = draftAttesterDid.trim().toLowerCase();
@@ -443,8 +441,8 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
443441
do {
444442
const response = await axios.get(`${searchServerURL}${VERSION}/metrics/challenge-receipts`, {
445443
params: {
446-
verifiedAfter,
447-
verifiedBefore,
444+
updatedAfter,
445+
updatedBefore,
448446
limit: receiptBrowseFetchLimit,
449447
offset,
450448
},
@@ -477,7 +475,7 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
477475
return () => {
478476
ignore = true;
479477
};
480-
}, [attesterDid, setError, verifiedAfter, verifiedBefore]);
478+
}, [attesterDid, setError, updatedAfter, updatedBefore]);
481479

482480
useEffect(() => {
483481
let ignore = false;
@@ -501,8 +499,8 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
501499
const response = await axios.get(`${searchServerURL}${VERSION}/metrics/challenge-receipts/usage`, {
502500
params: {
503501
attesterDid,
504-
verifiedAfter,
505-
verifiedBefore,
502+
updatedAfter,
503+
updatedBefore,
506504
limit: usageFetchLimit,
507505
offset,
508506
},
@@ -535,7 +533,7 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
535533
return () => {
536534
ignore = true;
537535
};
538-
}, [attesterDid, setError, verifiedAfter, verifiedBefore]);
536+
}, [attesterDid, setError, updatedAfter, updatedBefore]);
539537

540538
useEffect(() => {
541539
const rowCount = attesterDid ? usageRows.length : filteredAttesterRows.length;
@@ -564,8 +562,8 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
564562
attesterDid,
565563
schemaDid: selectedSchemaDid,
566564
requesterDid: selectedRequesterDid,
567-
verifiedAfter,
568-
verifiedBefore,
565+
updatedAfter,
566+
updatedBefore,
569567
limit: receiptPageSize,
570568
offset: receiptPage * receiptPageSize,
571569
},
@@ -609,8 +607,8 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
609607
selectedSchemaDid,
610608
setError,
611609
updateParams,
612-
verifiedAfter,
613-
verifiedBefore,
610+
updatedAfter,
611+
updatedBefore,
614612
]);
615613

616614
return (
@@ -702,14 +700,14 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
702700
<Table size="small">
703701
<TableHead>
704702
<TableRow>
705-
<TableCell width={180}>Verified</TableCell>
703+
<TableCell width={180}>Updated</TableCell>
706704
<TableCell>Receipt DID</TableCell>
707705
</TableRow>
708706
</TableHead>
709707
<TableBody>
710708
{receipts.map((row) => (
711709
<TableRow key={row.receiptDid}>
712-
<TableCell>{formatTimestamp(row.verifiedAt)}</TableCell>
710+
<TableCell>{formatTimestamp(row.updatedAt)}</TableCell>
713711
<TableCell>
714712
<DidLink did={row.receiptDid} maxWidth="none" />
715713
</TableCell>
@@ -823,8 +821,8 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
823821
<TableCell width={90}>Uses</TableCell>
824822
<TableCell width={110}>Templates</TableCell>
825823
<TableCell width={110}>Requesters</TableCell>
826-
<TableCell width={170}>First Verified</TableCell>
827-
<TableCell width={170}>Last Verified</TableCell>
824+
<TableCell width={170}>First Updated</TableCell>
825+
<TableCell width={170}>Last Updated</TableCell>
828826
</TableRow>
829827
</TableHead>
830828
<TableBody>
@@ -845,8 +843,8 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
845843
<TableCell>{row.count}</TableCell>
846844
<TableCell>{row.templateCount}</TableCell>
847845
<TableCell>{row.requesterCount}</TableCell>
848-
<TableCell>{formatTimestamp(row.firstVerifiedAt)}</TableCell>
849-
<TableCell>{formatTimestamp(row.lastVerifiedAt)}</TableCell>
846+
<TableCell>{formatTimestamp(row.firstUpdatedAt)}</TableCell>
847+
<TableCell>{formatTimestamp(row.lastUpdatedAt)}</TableCell>
850848
</TableRow>
851849
))}
852850
</TableBody>
@@ -919,8 +917,8 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
919917
<TableRow>
920918
<TableCell>Schema DID</TableCell>
921919
<TableCell width={90}>Count</TableCell>
922-
<TableCell width={170}>First Verified</TableCell>
923-
<TableCell width={170}>Last Verified</TableCell>
920+
<TableCell width={170}>First Updated</TableCell>
921+
<TableCell width={170}>Last Updated</TableCell>
924922
<TableCell width={130}>Receipts</TableCell>
925923
</TableRow>
926924
</TableHead>
@@ -934,8 +932,8 @@ function ChallengeReceipts({ setError }: { setError: (error: any) => void }) {
934932
<DidLink did={row.schemaDid} maxWidth={260} />
935933
</TableCell>
936934
<TableCell>{row.count}</TableCell>
937-
<TableCell>{formatTimestamp(row.firstVerifiedAt)}</TableCell>
938-
<TableCell>{formatTimestamp(row.lastVerifiedAt)}</TableCell>
935+
<TableCell>{formatTimestamp(row.firstUpdatedAt)}</TableCell>
936+
<TableCell>{formatTimestamp(row.lastUpdatedAt)}</TableCell>
939937
<TableCell>
940938
<Button
941939
variant="outlined"

services/search-server/src/challenge-receipts.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ interface MaybeChallengeReceipt {
55
attesterDid?: unknown;
66
schemaDid?: unknown;
77
requesterDid?: unknown;
8-
verifiedAt?: unknown;
98
responseCommitment?: unknown;
109
}
1110

@@ -34,10 +33,10 @@ function isIsoDateString(value: unknown): value is string {
3433
return typeof value === 'string' && !Number.isNaN(new Date(value).getTime());
3534
}
3635

37-
function getFallbackUpdatedAt(doc: MaybeMdipDocument, verifiedAt: string): string {
36+
function getOperationUpdatedAt(doc: MaybeMdipDocument): string | null {
3837
const updatedAt = doc.didDocumentMetadata?.updated ?? doc.didDocumentMetadata?.created;
3938

40-
return typeof updatedAt === 'string' ? updatedAt : verifiedAt;
39+
return isIsoDateString(updatedAt) ? updatedAt : null;
4140
}
4241

4342
export function extractChallengeReceipts(
@@ -60,11 +59,13 @@ export function extractChallengeReceipts(
6059

6160
const receipt = value as MaybeChallengeReceipt;
6261

62+
const updatedAt = getOperationUpdatedAt(mdipDoc);
63+
6364
if (receipt.version !== 1 ||
6465
!isDid(receipt.attesterDid) ||
6566
!isDid(receipt.schemaDid) ||
6667
!isDid(receipt.requesterDid) ||
67-
!isIsoDateString(receipt.verifiedAt) ||
68+
!updatedAt ||
6869
!isNonEmptyString(receipt.responseCommitment)) {
6970
return [];
7071
}
@@ -75,9 +76,8 @@ export function extractChallengeReceipts(
7576
attesterDid: receipt.attesterDid,
7677
schemaDid: receipt.schemaDid,
7778
requesterDid: receipt.requesterDid,
78-
verifiedAt: receipt.verifiedAt,
7979
responseCommitment: receipt.responseCommitment,
80-
updatedAt: getFallbackUpdatedAt(mdipDoc, receipt.verifiedAt),
80+
updatedAt,
8181
},
8282
];
8383
}

services/search-server/src/db/json-memory.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ export default class DIDsDbMemory implements DIDsDb {
117117
offset = 0,
118118
} = options;
119119
const filtered = this.filterChallengeReceipts(options)
120-
.sort((a, b) => b.verifiedAt.localeCompare(a.verifiedAt) || a.receiptDid.localeCompare(b.receiptDid));
120+
.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt) || a.receiptDid.localeCompare(b.receiptDid));
121121
const normalizedLimit = Math.max(0, limit);
122122
const normalizedOffset = Math.max(0, offset);
123123

@@ -153,20 +153,20 @@ export default class DIDsDbMemory implements DIDsDb {
153153
schemaDid: record.schemaDid,
154154
requesterDid: record.requesterDid,
155155
count: 1,
156-
firstVerifiedAt: record.verifiedAt,
157-
lastVerifiedAt: record.verifiedAt,
156+
firstUpdatedAt: record.updatedAt,
157+
lastUpdatedAt: record.updatedAt,
158158
},
159159
});
160160
continue;
161161
}
162162

163163
existing.commitments.add(record.responseCommitment);
164164
existing.record.count = existing.commitments.size;
165-
if (record.verifiedAt < existing.record.firstVerifiedAt) {
166-
existing.record.firstVerifiedAt = record.verifiedAt;
165+
if (record.updatedAt < existing.record.firstUpdatedAt) {
166+
existing.record.firstUpdatedAt = record.updatedAt;
167167
}
168-
if (record.verifiedAt > existing.record.lastVerifiedAt) {
169-
existing.record.lastVerifiedAt = record.verifiedAt;
168+
if (record.updatedAt > existing.record.lastUpdatedAt) {
169+
existing.record.lastUpdatedAt = record.updatedAt;
170170
}
171171
}
172172

@@ -280,8 +280,8 @@ export default class DIDsDbMemory implements DIDsDb {
280280
attesterDid,
281281
schemaDid,
282282
requesterDid,
283-
verifiedAfter,
284-
verifiedBefore,
283+
updatedAfter,
284+
updatedBefore,
285285
} = options;
286286
const receiptDid = 'receiptDid' in options ? options.receiptDid : undefined;
287287
const responseCommitment = 'responseCommitment' in options ? options.responseCommitment : undefined;
@@ -292,8 +292,8 @@ export default class DIDsDbMemory implements DIDsDb {
292292
.filter(record => !schemaDid || record.schemaDid === schemaDid)
293293
.filter(record => !requesterDid || record.requesterDid === requesterDid)
294294
.filter(record => !responseCommitment || record.responseCommitment === responseCommitment)
295-
.filter(record => !verifiedAfter || record.verifiedAt >= verifiedAfter)
296-
.filter(record => !verifiedBefore || record.verifiedAt <= verifiedBefore);
295+
.filter(record => !updatedAfter || record.updatedAt >= updatedAfter)
296+
.filter(record => !updatedBefore || record.updatedAt <= updatedBefore);
297297
}
298298

299299
private getPath(root: unknown, path: string): unknown {

0 commit comments

Comments
 (0)