-
Notifications
You must be signed in to change notification settings - Fork 136
Expand file tree
/
Copy pathstatus-router.ts
More file actions
90 lines (81 loc) · 3.85 KB
/
status-router.ts
File metadata and controls
90 lines (81 loc) · 3.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import {
CredentialStatus,
CredentialStatusGenerateArgs,
CredentialStatusReference,
CredentialStatusRequestArgs,
CredentialStatusUpdateArgs,
IAgentContext,
IAgentPlugin,
IAgentPluginSchema,
ICheckCredentialStatusArgs,
ICredentialStatusRouter,
IResolver,
VerifiableCredential,
} from "@veramo/core";
import { ICredentialIssuer } from "@veramo/credential-w3c";
import { AbstractStatusMethod } from "./abstract-status-method";
import { AbstractStatusStorage } from "./abstract-status-storage";
/**
* Agent plugin that implements {@link @veramo/core#ICredentialStatusRouter} interface
* @public
*/
export class CredentialStatusRouter implements IAgentPlugin {
/**
* Plugin methods
* @public
*/
readonly methods: ICredentialStatusRouter
readonly schema?: IAgentPluginSchema | undefined
private statusMethods: Record<string, AbstractStatusMethod>
// Beta: Default status method that bypasses the router
private defaultStatusMethod: string
// Beta: Instantiate a default storage method
private storage?: AbstractStatusStorage
constructor(options: {
statusMethods: Record<string, AbstractStatusMethod>
defaultStatusMethod: string
storage?: AbstractStatusStorage
}) {
this.statusMethods = options.statusMethods
this.defaultStatusMethod = options.defaultStatusMethod
this.storage = options.storage
this.methods = {
statusRouterGetStatusMethods: this.statusRouterGetStatusMethods.bind(this),
statusRouterCheckStatus: this.statusRouterCheckCredentialStatus.bind(this),
statusRouterGenerateStatus: this.statusRouterGenerateStatus.bind(this),
statusRouterParseStatus: this.statusRouterParseStatus.bind(this),
statusRouterUpdateStatus: this.statusRouterUpdateStatus.bind(this),
}
}
private getStatusMethod(statusReference: CredentialStatusReference): AbstractStatusMethod {
let statusMethod: AbstractStatusMethod | undefined = this.statusMethods[statusReference.type]
if (!statusMethod) {
throw new Error(`invalid_argument: unrecognized method ${statusReference.type}`)
}
return statusMethod
}
/** {@inheritDoc @veramo/core#ICredentialStatusRouter.statusRouterGetStatusMethods} */
async statusRouterGetStatusMethods(): Promise<string[]> {
return Object.keys(this.statusMethods)
}
/** {@inheritDoc @veramo/core#ICredentialStatusRouter.statusRouterCheckCredentialStatus} */
async statusRouterCheckCredentialStatus(args: ICheckCredentialStatusArgs, context: IAgentContext<IResolver>): Promise<CredentialStatus> {
const statusMethod = this.getStatusMethod(args.credential?.credentialStatus!)
return statusMethod.checkCredentialStatus(args, context)
}
/** {@inheritDoc @veramo/core#ICredentialStatusRouter.statusRouterGenerateStatus} */
async statusRouterGenerateStatus(args: CredentialStatusGenerateArgs): Promise<CredentialStatusReference> {
const statusMethod = this.getStatusMethod({ id: '', type: args.type } as CredentialStatusReference)
return statusMethod.credentialStatusGenerate(args)
}
/** {@inheritDoc @veramo/core#ICredentialStatusRouter.statusRouterParseStatus} */
async statusRouterParseStatus(args: CredentialStatusRequestArgs, context: IAgentContext<ICredentialIssuer>): Promise<VerifiableCredential> {
const statusMethod = this.getStatusMethod(args.credential.credentialStatus)
return statusMethod.credentialStatusRead(args, context)
}
/** {@inheritDoc @veramo/core#ICredentialStatusRouter.statusRouterUpdateStatus} */
async statusRouterUpdateStatus(args: CredentialStatusUpdateArgs): Promise<any> {
const statusMethod = this.getStatusMethod(args.vc.credentialStatus!)
return statusMethod.credentialStatusUpdate(args)
}
}