Skip to content

Commit 77a2d85

Browse files
committed
fix: FindRegistry using uri then issuer
Signed-off-by: DaevMithran <[email protected]>
1 parent 30e45c1 commit 77a2d85

File tree

4 files changed

+37
-42
lines changed

4 files changed

+37
-42
lines changed

packages/cheqd/src/wrappers/CheqdTokenStatusListRegistry.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ export class CheqdTokenStatusListRegistry implements TokenStatusListRegistry {
3333
}
3434
const { did } = parsedDid
3535

36-
if (options.previousStatusListUri && options.previousStatusListUri.method === 'did') {
37-
const response = await cheqdDidResolver.resolveResource(agentContext, options.previousStatusListUri.didUrl)
36+
if (options.uri) {
37+
const response = await cheqdDidResolver.resolveResource(agentContext, options.uri)
3838
if (response.error || !response.resourceMetadata) {
3939
throw new CredoError(response.message)
4040
}
@@ -90,10 +90,10 @@ export class CheqdTokenStatusListRegistry implements TokenStatusListRegistry {
9090
/**
9191
* Retrieve a token status list JWT from the registry
9292
*/
93-
async retrieve(agentContext: AgentContext, statusListUri: SdJwtVcIssuerDid): Promise<string> {
93+
async retrieve(agentContext: AgentContext, uri: string): Promise<string> {
9494
const cheqdDidResolver = agentContext.dependencyManager.resolve(CheqdDidResolver)
9595

96-
const response = await cheqdDidResolver.resolveResource(agentContext, statusListUri.didUrl)
96+
const response = await cheqdDidResolver.resolveResource(agentContext, uri)
9797
if (response.error || !response.resourceMetadata) {
9898
throw new CredoError(response.message)
9999
}

packages/cheqd/tests/cheqd-token-status-list.e2e.test.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,24 +55,21 @@ describe('Cheqd DID Token Status List Registry', () => {
5555
expect(result.uri).toBeDefined()
5656
expect(result.uri).toContain(did)
5757

58-
const statusListUri: SdJwtVcIssuer = {
59-
method: 'did',
60-
didUrl: result.uri as string,
61-
}
58+
const uri = result.uri as string
6259

6360
// fetch token status list
64-
const statusList = await tokenStatusListService.getStatusList(agent.context, statusListUri)
61+
const statusList = await tokenStatusListService.getStatusList(agent.context, uri)
6562
expect(statusList).toBeDefined()
6663

6764
// verify token status at index 0
68-
const status = await tokenStatusListService.getStatus(agent.context, statusListUri, 0)
65+
const status = await tokenStatusListService.getStatus(agent.context, uri, 0)
6966
expect(status).toBe(0)
7067

7168
// revoke index 0
72-
await tokenStatusListService.revokeIndex(agent.context, issuer, statusListUri, { indices: [0], publish: true })
69+
await tokenStatusListService.revokeIndex(agent.context, issuer, { indices: [0], publish: true, uri })
7370

7471
// verify token status at index 0
75-
const isRevoked = await tokenStatusListService.getStatus(agent.context, statusListUri, 0)
72+
const isRevoked = await tokenStatusListService.getStatus(agent.context, uri, 0)
7673
expect(isRevoked).toBe(1)
7774
})
7875
})

packages/core/src/modules/sd-jwt-vc/credential-status/token-status-list/TokenStatusList.ts

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { StatusList, getListFromStatusListJWT, getStatusListFromJWT } from '@sd-jwt/jwt-status-list'
1+
import { StatusList, getListFromStatusListJWT } from '@sd-jwt/jwt-status-list'
2+
import { isURL } from 'class-validator'
23
import { injectable } from 'tsyringe'
34
import { AgentContext } from '../../../../agent'
45
import { JwsService, Jwt, JwtPayload } from '../../../../crypto'
@@ -14,7 +15,6 @@ import {
1415
TokenStatusListJwtPayload,
1516
TokenStatusListRegistry,
1617
} from './TokenStatusListRegistry'
17-
import { isURL } from 'class-validator'
1818

1919
export interface CreateTokenStatusListOptions extends PublishTokenStatusListOptions {
2020
size: number
@@ -27,7 +27,8 @@ export interface CreateTokenStatusListResult {
2727
uri?: string
2828
}
2929

30-
export interface RevokeIndicesOptions {
30+
export interface RevokeIndicesOptions extends PublishTokenStatusListOptions {
31+
uri: string
3132
indices: number[]
3233
publish: boolean
3334
}
@@ -46,8 +47,7 @@ export class TokenStatusListService {
4647
async createStatusList(
4748
agentContext: AgentContext,
4849
issuer: SdJwtVcIssuer,
49-
uri?: string,
50-
options?: CreateTokenStatusListOptions
50+
options: CreateTokenStatusListOptions
5151
): Promise<CreateTokenStatusListResult> {
5252
const sdJwtService = agentContext.dependencyManager.resolve(SdJwtVcService)
5353
const jwsService = agentContext.dependencyManager.resolve(JwsService)
@@ -80,7 +80,7 @@ export class TokenStatusListService {
8080
})
8181

8282
if (options.publish) {
83-
const result = await this.publishStatusList(agentContext, issuer, jwt, uri, options)
83+
const result = await this.publishStatusList(agentContext, issuer, jwt, options)
8484
return { jwt, uri: result }
8585
}
8686

@@ -90,15 +90,14 @@ export class TokenStatusListService {
9090
async revokeIndex(
9191
agentContext: AgentContext,
9292
issuer: SdJwtVcIssuer,
93-
uri: string,
9493
options: RevokeIndicesOptions
9594
): Promise<boolean> {
9695
const sdJwtService = agentContext.dependencyManager.resolve(SdJwtVcService)
9796
const jwsService = agentContext.dependencyManager.resolve(JwsService)
9897

9998
const { indices, publish, ...publishOptions } = options
10099

101-
const currentStatusListJwt = await this.getStatusList(agentContext, uri)
100+
const currentStatusListJwt = await this.getStatusList(agentContext, options.uri)
102101
const parsedStatusListJwt = Jwt.fromSerializedJwt(currentStatusListJwt)
103102

104103
// extract and validate iss
@@ -143,7 +142,7 @@ export class TokenStatusListService {
143142
})
144143

145144
if (options.publish) {
146-
await this.publishStatusList(agentContext, issuer, jwt, uri, publishOptions)
145+
await this.publishStatusList(agentContext, issuer, jwt, publishOptions)
147146
}
148147

149148
return true
@@ -155,20 +154,13 @@ export class TokenStatusListService {
155154
return statusList.getStatus(index)
156155
}
157156

158-
async getStatusList(agentContext: AgentContext, uri: string): Promise<string> {
159-
const registry = this.findRegistry(uri)
157+
async getStatusList(agentContext: AgentContext, uri: string): Promise<string> {
158+
const registry = this.findRegistry({ uri })
160159
if (!registry) {
161160
throw new TokenStatusListError(`No token status list registry registered for uri ${uri}`)
162161
}
163-
const jwt = await registry.retrieve(agentContext, uri)
164162

165-
// verify jwt
166-
// const verified = await this.verifyStatusList(agentContext, uri, jwt)
167-
// if (!verified.isValid) {
168-
// throw new TokenStatusListError('Invalid Jwt in the provided uri')
169-
// }
170-
171-
return jwt
163+
return await registry.retrieve(agentContext, uri)
172164
}
173165

174166
getStatusListFetcher(agentContext: AgentContext) {
@@ -181,7 +173,6 @@ export class TokenStatusListService {
181173
agentContext: AgentContext,
182174
issuer: SdJwtVcIssuer,
183175
jwt: string,
184-
uri: string,
185176
options: PublishTokenStatusListOptions
186177
): Promise<string> {
187178
// verify jwt
@@ -190,21 +181,28 @@ export class TokenStatusListService {
190181
throw new TokenStatusListError('Invalid Jwt in the provided statusListUri')
191182
}
192183

193-
const registry = this.findRegistry(uri)
184+
const registry = this.findRegistry({ uri: options.uri, issuer })
194185
if (!registry) {
195186
throw new TokenStatusListError(`No token status list registry registered for issuer ${issuer}`)
196187
}
197-
return await registry.publish(agentContext, issuer, jwt, uri, options)
188+
return await registry.publish(agentContext, issuer, jwt, options)
198189
}
199190

200-
private findRegistry(uri: string): TokenStatusListRegistry | null {
191+
private findRegistry({ uri, issuer }: { uri?: string; issuer?: SdJwtVcIssuer }): TokenStatusListRegistry | null {
201192
let method: string
202-
if (isDid(uri)) {
203-
method = parseDid(uri).method
204-
} else if (isURL(uri)) {
205-
method = 'http'
193+
194+
if (uri) {
195+
if (isDid(uri)) {
196+
method = parseDid(uri).method
197+
} else if (isURL(uri)) {
198+
method = 'http'
199+
} else {
200+
throw new TokenStatusListError('Status List Uri is not supported')
201+
}
202+
} else if (issuer && issuer.method === 'did') {
203+
method = parseDid(issuer.didUrl).method
206204
} else {
207-
throw new TokenStatusListError("Status List Uri is not supported")
205+
throw new TokenStatusListError('Status List Uri is not provided')
208206
}
209207

210208
return this.sdJwtVcModuleConfig.registries.find((r) => r.supportedMethods.includes(method)) ?? null

packages/core/src/modules/sd-jwt-vc/credential-status/token-status-list/TokenStatusListRegistry.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { AgentContext } from '../../../../agent'
33
import { SdJwtVcIssuer } from '../../SdJwtVcOptions'
44

55
export interface PublishTokenStatusListOptions {
6+
uri?: string
67
name?: string
78
version?: string
89

@@ -30,12 +31,11 @@ export interface TokenStatusListRegistry {
3031
agentContext: AgentContext,
3132
issuer: SdJwtVcIssuer,
3233
jwt: string,
33-
statusListUri?: string,
3434
options?: PublishTokenStatusListOptions
3535
): Promise<string>
3636

3737
/**
3838
* Retrieve a token status list JWT from the registry
3939
*/
40-
retrieve(agentContext: AgentContext, statusListUri: SdJwtVcIssuer): Promise<string>
40+
retrieve(agentContext: AgentContext, uri: string): Promise<string>
4141
}

0 commit comments

Comments
 (0)