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'
23import { injectable } from 'tsyringe'
34import { AgentContext } from '../../../../agent'
45import { JwsService , Jwt , JwtPayload } from '../../../../crypto'
@@ -14,7 +15,6 @@ import {
1415 TokenStatusListJwtPayload ,
1516 TokenStatusListRegistry ,
1617} from './TokenStatusListRegistry'
17- import { isURL } from 'class-validator'
1818
1919export 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
0 commit comments