@cheqd/studio 3.15.2-develop.1 → 3.16.0-develop.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +1 -0
- package/dist/app.js.map +1 -1
- package/dist/controllers/admin/webhook.js +1 -1
- package/dist/controllers/admin/webhook.js.map +1 -1
- package/dist/controllers/api/account.d.ts +32 -0
- package/dist/controllers/api/account.d.ts.map +1 -1
- package/dist/controllers/api/account.js +78 -0
- package/dist/controllers/api/account.js.map +1 -1
- package/dist/controllers/api/accreditation.d.ts +17 -11
- package/dist/controllers/api/accreditation.d.ts.map +1 -1
- package/dist/controllers/api/accreditation.js +127 -299
- package/dist/controllers/api/accreditation.js.map +1 -1
- package/dist/controllers/api/credential-status.d.ts +1 -9
- package/dist/controllers/api/credential-status.d.ts.map +1 -1
- package/dist/controllers/api/credential-status.js +65 -19
- package/dist/controllers/api/credential-status.js.map +1 -1
- package/dist/controllers/api/credential.d.ts.map +1 -1
- package/dist/controllers/api/credential.js +9 -12
- package/dist/controllers/api/credential.js.map +1 -1
- package/dist/middleware/auth/routes/api/account-auth.d.ts.map +1 -1
- package/dist/middleware/auth/routes/api/account-auth.js +2 -0
- package/dist/middleware/auth/routes/api/account-auth.js.map +1 -1
- package/dist/middleware/auth/routes/api/credential-auth.d.ts.map +1 -1
- package/dist/middleware/auth/routes/api/credential-auth.js +8 -2
- package/dist/middleware/auth/routes/api/credential-auth.js.map +1 -1
- package/dist/services/api/accreditation.d.ts +21 -4
- package/dist/services/api/accreditation.d.ts.map +1 -1
- package/dist/services/api/accreditation.js +432 -16
- package/dist/services/api/accreditation.js.map +1 -1
- package/dist/services/api/credential-status.d.ts.map +1 -1
- package/dist/services/api/credential-status.js +11 -5
- package/dist/services/api/credential-status.js.map +1 -1
- package/dist/services/api/credentials.d.ts +4 -1
- package/dist/services/api/credentials.d.ts.map +1 -1
- package/dist/services/api/credentials.js +57 -5
- package/dist/services/api/credentials.js.map +1 -1
- package/dist/services/api/identifier.d.ts +1 -0
- package/dist/services/api/identifier.d.ts.map +1 -1
- package/dist/services/api/identifier.js +8 -0
- package/dist/services/api/identifier.js.map +1 -1
- package/dist/services/api/resource.d.ts +5 -0
- package/dist/services/api/resource.d.ts.map +1 -1
- package/dist/services/api/resource.js +60 -0
- package/dist/services/api/resource.js.map +1 -1
- package/dist/services/helpers.d.ts.map +1 -1
- package/dist/services/helpers.js +2 -3
- package/dist/services/helpers.js.map +1 -1
- package/dist/services/identity/abstract.d.ts +3 -3
- package/dist/services/identity/abstract.d.ts.map +1 -1
- package/dist/services/identity/abstract.js +1 -1
- package/dist/services/identity/abstract.js.map +1 -1
- package/dist/services/identity/default.d.ts +3 -3
- package/dist/services/identity/default.d.ts.map +1 -1
- package/dist/services/identity/default.js +2 -2
- package/dist/services/identity/default.js.map +1 -1
- package/dist/services/identity/index.d.ts +4 -3
- package/dist/services/identity/index.d.ts.map +1 -1
- package/dist/services/identity/index.js.map +1 -1
- package/dist/services/identity/providers/dock/identity.d.ts +3 -1
- package/dist/services/identity/providers/dock/identity.d.ts.map +1 -1
- package/dist/services/identity/providers/dock/identity.js +24 -0
- package/dist/services/identity/providers/dock/identity.js.map +1 -1
- package/dist/services/identity/providers/studio/agent.d.ts +3 -3
- package/dist/services/identity/providers/studio/agent.d.ts.map +1 -1
- package/dist/services/identity/providers/studio/agent.js +36 -23
- package/dist/services/identity/providers/studio/agent.js.map +1 -1
- package/dist/services/identity/providers/studio/local.d.ts +1 -1
- package/dist/services/identity/providers/studio/local.d.ts.map +1 -1
- package/dist/services/identity/providers/studio/postgres.d.ts +14 -1
- package/dist/services/identity/providers/studio/postgres.d.ts.map +1 -1
- package/dist/services/identity/providers/studio/postgres.js +23 -0
- package/dist/services/identity/providers/studio/postgres.js.map +1 -1
- package/dist/services/track/admin/account-submitter.d.ts +1 -0
- package/dist/services/track/admin/account-submitter.d.ts.map +1 -1
- package/dist/services/track/admin/account-submitter.js +26 -4
- package/dist/services/track/admin/account-submitter.js.map +1 -1
- package/dist/static/swagger-api.json +149 -16
- package/dist/types/accreditation.d.ts +7 -2
- package/dist/types/accreditation.d.ts.map +1 -1
- package/dist/types/accreditation.js.map +1 -1
- package/dist/types/credential-status.d.ts +4 -1
- package/dist/types/credential-status.d.ts.map +1 -1
- package/dist/types/credential-status.js.map +1 -1
- package/dist/types/credential.d.ts +2 -1
- package/dist/types/credential.d.ts.map +1 -1
- package/dist/types/credential.js.map +1 -1
- package/dist/types/swagger-api-types.d.ts +54 -1
- package/dist/types/swagger-api-types.d.ts.map +1 -1
- package/dist/types/swagger-api-types.js +54 -1
- package/dist/types/swagger-api-types.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,18 +1,275 @@
|
|
|
1
|
-
import { DIDAccreditationTypes } from '../../types/accreditation.js';
|
|
1
|
+
import { AccreditationRequestType, DIDAccreditationTypes, DIDAccreditationPolicyTypes, } from '../../types/accreditation.js';
|
|
2
2
|
import { isCredentialIssuerDidDeactivated } from '../helpers.js';
|
|
3
3
|
import { IdentityServiceStrategySetup } from '../identity/index.js';
|
|
4
4
|
import { StatusCodes } from 'http-status-codes';
|
|
5
|
+
import { parseDidFromDidUrl } from '../../helpers/helpers.js';
|
|
6
|
+
import { v4 } from 'uuid';
|
|
7
|
+
import { CredentialCategory, CredentialConnectors } from '../../types/credential.js';
|
|
8
|
+
import { Credentials } from './credentials.js';
|
|
9
|
+
import NodeCache from 'node-cache';
|
|
10
|
+
import { StatusListType } from '../../types/credential-status.js';
|
|
11
|
+
const ACCREDITATION_RESOLVE_CACHE_TTL_MS = 30_000;
|
|
12
|
+
const ACCREDITATION_RESOLVE_CACHE_MAX_ENTRIES = 200;
|
|
13
|
+
const ACCREDITATION_RESOLVE_CONCURRENCY = 8;
|
|
14
|
+
function buildCacheKey(url, customerId) {
|
|
15
|
+
return `${customerId ?? 'anonymous'}::${url}`;
|
|
16
|
+
}
|
|
17
|
+
const accreditationResolveCache = new NodeCache({
|
|
18
|
+
stdTTL: ACCREDITATION_RESOLVE_CACHE_TTL_MS / 1000,
|
|
19
|
+
checkperiod: 0,
|
|
20
|
+
useClones: false,
|
|
21
|
+
deleteOnExpire: true,
|
|
22
|
+
maxKeys: ACCREDITATION_RESOLVE_CACHE_MAX_ENTRIES,
|
|
23
|
+
});
|
|
24
|
+
const inFlightAccreditations = new Map();
|
|
25
|
+
function getCachedAccreditation(key) {
|
|
26
|
+
return accreditationResolveCache.get(key) ?? null;
|
|
27
|
+
}
|
|
28
|
+
function setCachedAccreditation(key, value) {
|
|
29
|
+
accreditationResolveCache.set(key, value);
|
|
30
|
+
}
|
|
5
31
|
export class AccreditationService {
|
|
6
32
|
static instance = new AccreditationService();
|
|
33
|
+
async issue_accreditation(accreditationType, issuerDid, subjectDid, schemas, body, customer) {
|
|
34
|
+
// Get strategy e.g. postgres or local
|
|
35
|
+
const identityServiceStrategySetup = new IdentityServiceStrategySetup();
|
|
36
|
+
// Handles string input instead of an array
|
|
37
|
+
let { type, '@context': context, parentAccreditation, rootAuthorization, trustFramework, trustFrameworkId, attributes, accreditationName, format, credentialStatus, } = body;
|
|
38
|
+
if (typeof type === 'string') {
|
|
39
|
+
type = [type];
|
|
40
|
+
}
|
|
41
|
+
if (typeof context === 'string') {
|
|
42
|
+
context = [context];
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
// Validate issuer and subject DIDs in parallel only for authorize
|
|
46
|
+
// For attest, accredit they are validated in verify_accreditation
|
|
47
|
+
const [issuerDidRes, subjectDidRes] = await Promise.all([
|
|
48
|
+
identityServiceStrategySetup.agent.resolveDid(issuerDid),
|
|
49
|
+
identityServiceStrategySetup.agent.resolveDid(subjectDid),
|
|
50
|
+
]);
|
|
51
|
+
// Validate issuer DID
|
|
52
|
+
if (!issuerDidRes?.didDocument) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
status: StatusCodes.BAD_REQUEST,
|
|
56
|
+
error: `DID ${issuerDid} is not resolved because of error from resolver: ${issuerDidRes.didResolutionMetadata.error}.`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (issuerDidRes.didDocumentMetadata.deactivated) {
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
status: StatusCodes.BAD_REQUEST,
|
|
63
|
+
error: `${issuerDid} is deactivated`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// Validate subject DID
|
|
67
|
+
if (!subjectDidRes?.didDocument) {
|
|
68
|
+
return {
|
|
69
|
+
success: false,
|
|
70
|
+
status: StatusCodes.BAD_REQUEST,
|
|
71
|
+
error: `DID ${subjectDid} is not resolved because of error from resolver: ${subjectDidRes.didResolutionMetadata.error}.`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (subjectDidRes.didDocumentMetadata.deactivated) {
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
status: StatusCodes.BAD_REQUEST,
|
|
78
|
+
error: `${subjectDid} is deactivated`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const resourceId = v4();
|
|
82
|
+
const accreditedFor = schemas.map(({ url, types }) => ({
|
|
83
|
+
schemaId: url,
|
|
84
|
+
types: Array.isArray(types) ? types : [types],
|
|
85
|
+
}));
|
|
86
|
+
// construct credential request
|
|
87
|
+
const credentialRequest = {
|
|
88
|
+
subjectDid,
|
|
89
|
+
attributes: {
|
|
90
|
+
...attributes,
|
|
91
|
+
accreditedFor,
|
|
92
|
+
id: subjectDid,
|
|
93
|
+
},
|
|
94
|
+
issuerDid,
|
|
95
|
+
format: format || 'jwt',
|
|
96
|
+
connector: CredentialConnectors.Resource,
|
|
97
|
+
credentialId: resourceId,
|
|
98
|
+
credentialName: accreditationName,
|
|
99
|
+
credentialStatus,
|
|
100
|
+
category: CredentialCategory.ACCREDITATION,
|
|
101
|
+
};
|
|
102
|
+
let resourceType;
|
|
103
|
+
switch (accreditationType) {
|
|
104
|
+
case AccreditationRequestType.authorize:
|
|
105
|
+
resourceType = DIDAccreditationTypes.VerifiableAuthorizationForTrustChain;
|
|
106
|
+
credentialRequest.type = [...(type || []), resourceType];
|
|
107
|
+
credentialRequest.termsOfUse = {
|
|
108
|
+
type: DIDAccreditationPolicyTypes.Authorize,
|
|
109
|
+
trustFramework,
|
|
110
|
+
trustFrameworkId,
|
|
111
|
+
};
|
|
112
|
+
break;
|
|
113
|
+
case AccreditationRequestType.accredit:
|
|
114
|
+
resourceType = DIDAccreditationTypes.VerifiableAccreditationToAccredit;
|
|
115
|
+
credentialRequest.type = [...(type || []), resourceType];
|
|
116
|
+
credentialRequest.termsOfUse = {
|
|
117
|
+
type: DIDAccreditationPolicyTypes.Accredit,
|
|
118
|
+
parentAccreditation,
|
|
119
|
+
rootAuthorization,
|
|
120
|
+
};
|
|
121
|
+
break;
|
|
122
|
+
case AccreditationRequestType.attest:
|
|
123
|
+
resourceType = DIDAccreditationTypes.VerifiableAccreditationToAttest;
|
|
124
|
+
credentialRequest.type = [...(type || []), resourceType];
|
|
125
|
+
credentialRequest.termsOfUse = {
|
|
126
|
+
type: DIDAccreditationPolicyTypes.Accredit,
|
|
127
|
+
parentAccreditation,
|
|
128
|
+
rootAuthorization,
|
|
129
|
+
};
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
// validate parent and root accreditations
|
|
133
|
+
if (accreditationType === AccreditationRequestType.accredit ||
|
|
134
|
+
accreditationType === AccreditationRequestType.attest) {
|
|
135
|
+
const result = await this.verify_accreditation(issuerDid, parentAccreditation, accreditedFor, true, false, customer, rootAuthorization);
|
|
136
|
+
if (result.success === false) {
|
|
137
|
+
return {
|
|
138
|
+
success: false,
|
|
139
|
+
status: result.status,
|
|
140
|
+
error: `Invalid Request: Root Authorization or parent Accreditation is not valid: ${result.error}`,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// issue accreditation
|
|
145
|
+
const accreditation = await Credentials.instance.issue_credential(credentialRequest, customer);
|
|
146
|
+
return {
|
|
147
|
+
success: true,
|
|
148
|
+
status: StatusCodes.OK,
|
|
149
|
+
data: {
|
|
150
|
+
didUrls: [
|
|
151
|
+
`${issuerDid}/resources/${resourceId}`,
|
|
152
|
+
`${issuerDid}?resourceName=${encodeURIComponent(accreditationName)}&resourceType=${resourceType}`,
|
|
153
|
+
],
|
|
154
|
+
accreditation,
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
status: StatusCodes.INTERNAL_SERVER_ERROR,
|
|
162
|
+
error: `Internal error: ${error?.message || error}`,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async revoke_accreditation(didUrl, publish, symmetricKey, customer) {
|
|
167
|
+
const identityServiceStrategySetup = new IdentityServiceStrategySetup(customer.customerId);
|
|
168
|
+
try {
|
|
169
|
+
const res = await identityServiceStrategySetup.agent.resolve(didUrl);
|
|
170
|
+
const resource = await res.json();
|
|
171
|
+
if (resource.dereferencingMetadata) {
|
|
172
|
+
return {
|
|
173
|
+
success: false,
|
|
174
|
+
status: StatusCodes.NOT_FOUND,
|
|
175
|
+
error: `DID URL ${didUrl} is not found`,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const accreditation = resource;
|
|
179
|
+
const result = await identityServiceStrategySetup.agent.revokeCredentials(accreditation, StatusListType.Bitstring, publish, customer, symmetricKey);
|
|
180
|
+
return {
|
|
181
|
+
success: true,
|
|
182
|
+
status: StatusCodes.OK,
|
|
183
|
+
data: result,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
return {
|
|
188
|
+
success: false,
|
|
189
|
+
status: StatusCodes.INTERNAL_SERVER_ERROR,
|
|
190
|
+
error: `Internal error: ${error?.message || error}`,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async suspend_accreditation(didUrl, publish, symmetricKey, customer) {
|
|
195
|
+
const identityServiceStrategySetup = new IdentityServiceStrategySetup(customer.customerId);
|
|
196
|
+
try {
|
|
197
|
+
const res = await identityServiceStrategySetup.agent.resolve(didUrl);
|
|
198
|
+
const resource = await res.json();
|
|
199
|
+
if (resource.dereferencingMetadata) {
|
|
200
|
+
return {
|
|
201
|
+
success: false,
|
|
202
|
+
status: StatusCodes.NOT_FOUND,
|
|
203
|
+
error: `DID URL ${didUrl} is not found`,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
const accreditation = resource;
|
|
207
|
+
const result = await identityServiceStrategySetup.agent.suspendCredentials(accreditation, StatusListType.Bitstring, publish, customer, symmetricKey);
|
|
208
|
+
return {
|
|
209
|
+
success: true,
|
|
210
|
+
status: StatusCodes.OK,
|
|
211
|
+
data: result,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
return {
|
|
216
|
+
success: false,
|
|
217
|
+
status: StatusCodes.INTERNAL_SERVER_ERROR,
|
|
218
|
+
error: `Internal error: ${error?.message || error}`,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async reinstate_accreditation(didUrl, publish, symmetricKey, customer) {
|
|
223
|
+
const identityServiceStrategySetup = new IdentityServiceStrategySetup(customer.customerId);
|
|
224
|
+
try {
|
|
225
|
+
const res = await identityServiceStrategySetup.agent.resolve(didUrl);
|
|
226
|
+
const resource = await res.json();
|
|
227
|
+
if (resource.dereferencingMetadata) {
|
|
228
|
+
return {
|
|
229
|
+
success: false,
|
|
230
|
+
status: StatusCodes.NOT_FOUND,
|
|
231
|
+
error: `DID URL ${didUrl} is not found`,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
const accreditation = resource;
|
|
235
|
+
const result = await identityServiceStrategySetup.agent.reinstateCredentials(accreditation, StatusListType.Bitstring, publish, customer, symmetricKey);
|
|
236
|
+
return {
|
|
237
|
+
success: true,
|
|
238
|
+
status: StatusCodes.OK,
|
|
239
|
+
data: result,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
return {
|
|
244
|
+
success: false,
|
|
245
|
+
status: StatusCodes.INTERNAL_SERVER_ERROR,
|
|
246
|
+
error: `Internal error: ${error?.message || error}`,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
7
250
|
async verify_accreditation(subjectDid, didUrl, accreditedFor = [], verifyStatus, allowDeactivatedDid, customer, rootAuthorization, policies) {
|
|
8
251
|
// Get strategy e.g. postgres or local
|
|
9
252
|
const identityServiceStrategySetup = new IdentityServiceStrategySetup();
|
|
10
253
|
let accreditationUrl = didUrl;
|
|
11
254
|
let accreditedSubject = subjectDid;
|
|
12
255
|
let initialVerifyResult = undefined;
|
|
256
|
+
let accreditorDids = [];
|
|
257
|
+
let deactivatedDidsCheckPromises = [];
|
|
13
258
|
while (true) {
|
|
14
|
-
const
|
|
15
|
-
const
|
|
259
|
+
const cacheKey = buildCacheKey(accreditationUrl, customer?.customerId);
|
|
260
|
+
const cached = getCachedAccreditation(cacheKey);
|
|
261
|
+
let result;
|
|
262
|
+
if (cached) {
|
|
263
|
+
result = cached;
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
const res = await identityServiceStrategySetup.agent.resolve(accreditationUrl);
|
|
267
|
+
result = await res.json();
|
|
268
|
+
// Cache successful dereferenced results (skip caching not-found / dereferencing metadata)
|
|
269
|
+
if (!result?.dereferencingMetadata) {
|
|
270
|
+
setCachedAccreditation(cacheKey, result);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
16
273
|
if (result.dereferencingMetadata) {
|
|
17
274
|
return {
|
|
18
275
|
success: false,
|
|
@@ -23,14 +280,11 @@ export class AccreditationService {
|
|
|
23
280
|
}
|
|
24
281
|
// Create credential object
|
|
25
282
|
const accreditation = result;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
data: initialVerifyResult,
|
|
32
|
-
error: `Error on verifying accreditation ${accreditationUrl}: Issuer DID is deactivated`,
|
|
33
|
-
};
|
|
283
|
+
const accreditorDid = typeof accreditation.issuer === 'string' ? accreditation.issuer : accreditation.issuer.id;
|
|
284
|
+
accreditorDids.push(accreditorDid);
|
|
285
|
+
// Check if issuer DID is deactivated
|
|
286
|
+
if (!allowDeactivatedDid) {
|
|
287
|
+
deactivatedDidsCheckPromises.push(isCredentialIssuerDidDeactivated(accreditation));
|
|
34
288
|
}
|
|
35
289
|
// Check if the accreditation is provided for the subjectDid
|
|
36
290
|
if (accreditation.credentialSubject.id !== accreditedSubject) {
|
|
@@ -41,9 +295,6 @@ export class AccreditationService {
|
|
|
41
295
|
error: `Error on verifying accreditation ${accreditationUrl}: Expected accreditation to be linked to subject DID ${accreditedSubject}, but found it linked to DID ${accreditation.credentialSubject.id} instead.`,
|
|
42
296
|
};
|
|
43
297
|
}
|
|
44
|
-
if (verifyStatus && !accreditation.credentialStatus) {
|
|
45
|
-
verifyStatus = false;
|
|
46
|
-
}
|
|
47
298
|
// Check if the accreditor has permission for the schema provided
|
|
48
299
|
if (!accreditedFor.every((schema) => accreditation.credentialSubject.accreditedFor.some((accredited) => schema.types.every((value) => (accredited.types || []).includes(value)) &&
|
|
49
300
|
accredited.schemaId === schema.schemaId))) {
|
|
@@ -98,7 +349,9 @@ export class AccreditationService {
|
|
|
98
349
|
error: `Error on verifying accreditation ${accreditationUrl}: Missing parentAccreditaiton and rootAuthorization in termsOfUse for accreditation: ${accreditationUrl}`,
|
|
99
350
|
};
|
|
100
351
|
}
|
|
101
|
-
|
|
352
|
+
if (isTypeAccreditation === DIDAccreditationTypes.VerifiableAccreditationToAccredit) {
|
|
353
|
+
accreditorDids.push(accreditorDid);
|
|
354
|
+
}
|
|
102
355
|
accreditationUrl = termsOfUse.parentAccreditation;
|
|
103
356
|
accreditedSubject = accreditorDid;
|
|
104
357
|
accreditedFor = accreditation.credentialSubject.accreditedFor;
|
|
@@ -113,13 +366,176 @@ export class AccreditationService {
|
|
|
113
366
|
rootAuthorization = termsOfUse.rootAuthorization;
|
|
114
367
|
}
|
|
115
368
|
else {
|
|
369
|
+
const results = await Promise.all(deactivatedDidsCheckPromises);
|
|
370
|
+
const deactivatedDids = results.filter((r) => r);
|
|
371
|
+
if (rootAuthorization && parseDidFromDidUrl(rootAuthorization) !== accreditation.credentialSubject.id) {
|
|
372
|
+
return {
|
|
373
|
+
status: StatusCodes.OK,
|
|
374
|
+
success: false,
|
|
375
|
+
data: {
|
|
376
|
+
...initialVerifyResult,
|
|
377
|
+
accreditorDids,
|
|
378
|
+
rootAuthorization: accreditation.credentialSubject.id,
|
|
379
|
+
termsOfUse: accreditation.termsOfUse,
|
|
380
|
+
},
|
|
381
|
+
error: `Error on verifying accreditation ${accreditationUrl}: Expected accreditation to be linked to root accreditation ${rootAuthorization}, but found it linked to DID ${accreditation.credentialSubject.id} instead`,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
if (deactivatedDids.length > 0) {
|
|
385
|
+
return {
|
|
386
|
+
status: StatusCodes.OK,
|
|
387
|
+
success: false,
|
|
388
|
+
data: initialVerifyResult,
|
|
389
|
+
error: `Error on verifying accreditation ${accreditationUrl}: DIDs ${deactivatedDids.join(', ')} are deactivated in the trust chain`,
|
|
390
|
+
};
|
|
391
|
+
}
|
|
116
392
|
return {
|
|
117
393
|
status: StatusCodes.OK,
|
|
118
394
|
success: true,
|
|
119
|
-
data:
|
|
395
|
+
data: {
|
|
396
|
+
...initialVerifyResult,
|
|
397
|
+
accreditorDids,
|
|
398
|
+
rootAuthorization: accreditation.credentialSubject.id,
|
|
399
|
+
termsOfUse: accreditation.termsOfUse,
|
|
400
|
+
},
|
|
120
401
|
};
|
|
121
402
|
}
|
|
122
403
|
}
|
|
123
404
|
}
|
|
405
|
+
async list_accreditations(customer, accreditationType, network, did, page, limit) {
|
|
406
|
+
const identityServiceStrategySetup = new IdentityServiceStrategySetup(customer.customerId);
|
|
407
|
+
let resourceType;
|
|
408
|
+
switch (accreditationType) {
|
|
409
|
+
case AccreditationRequestType.authorize:
|
|
410
|
+
resourceType = DIDAccreditationTypes.VerifiableAuthorizationForTrustChain;
|
|
411
|
+
break;
|
|
412
|
+
case AccreditationRequestType.accredit:
|
|
413
|
+
resourceType = DIDAccreditationTypes.VerifiableAccreditationToAccredit;
|
|
414
|
+
break;
|
|
415
|
+
case AccreditationRequestType.attest:
|
|
416
|
+
resourceType = DIDAccreditationTypes.VerifiableAccreditationToAttest;
|
|
417
|
+
break;
|
|
418
|
+
default:
|
|
419
|
+
return {
|
|
420
|
+
success: false,
|
|
421
|
+
status: StatusCodes.BAD_REQUEST,
|
|
422
|
+
error: `Invalid accreditationType: ${accreditationType}. Must be one of: authorize, accredit, attest.`,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
try {
|
|
426
|
+
// Fetch resources of accreditation resourceType associated with the account
|
|
427
|
+
const { resources } = await identityServiceStrategySetup.agent.findLatestResourcesVersionsByType(resourceType, customer, network, did, page, limit);
|
|
428
|
+
// Build resource URLs for resolution
|
|
429
|
+
const resourceUrls = resources.map((item) => `${item.did}/resources/${item.resourceId}`);
|
|
430
|
+
// No resources to resolve, return early
|
|
431
|
+
if (resourceUrls.length === 0) {
|
|
432
|
+
return {
|
|
433
|
+
success: true,
|
|
434
|
+
status: StatusCodes.OK,
|
|
435
|
+
data: {
|
|
436
|
+
total: 0,
|
|
437
|
+
accreditations: [],
|
|
438
|
+
},
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
// 1. Fetch all tracking records from the issued credentials table
|
|
442
|
+
const { credentials: trackingRecords } = await Credentials.instance.list(customer, {
|
|
443
|
+
category: CredentialCategory.ACCREDITATION,
|
|
444
|
+
providerCredentialId: resources.map((item) => item.resourceId),
|
|
445
|
+
});
|
|
446
|
+
// 2. OPTIMIZATION: Create a Map for O(1) tracking record lookup by providerCredentialId
|
|
447
|
+
const trackingMap = new Map();
|
|
448
|
+
for (const record of trackingRecords) {
|
|
449
|
+
trackingMap.set(record.providerCredentialId, record);
|
|
450
|
+
}
|
|
451
|
+
const resolveAccreditationWithCache = async (url) => {
|
|
452
|
+
const cacheKey = buildCacheKey(url, customer?.customerId);
|
|
453
|
+
const cached = getCachedAccreditation(cacheKey);
|
|
454
|
+
if (cached) {
|
|
455
|
+
return cached;
|
|
456
|
+
}
|
|
457
|
+
const inFlight = inFlightAccreditations.get(cacheKey);
|
|
458
|
+
if (inFlight) {
|
|
459
|
+
return inFlight;
|
|
460
|
+
}
|
|
461
|
+
const resolverPromise = (async () => {
|
|
462
|
+
try {
|
|
463
|
+
const res = await identityServiceStrategySetup.agent.resolve(url, true);
|
|
464
|
+
const credential = await res.json();
|
|
465
|
+
// Skip if the credential doesn't have contentStream
|
|
466
|
+
if (!credential.contentStream) {
|
|
467
|
+
return null;
|
|
468
|
+
}
|
|
469
|
+
const resourceId = credential.contentMetadata.resourceId;
|
|
470
|
+
const trackingRecord = trackingMap.get(resourceId);
|
|
471
|
+
if (trackingRecord) {
|
|
472
|
+
const { issuedCredentialId, providerId, providerCredentialId, status, statusUpdatedAt } = trackingRecord;
|
|
473
|
+
// Merge tracking metadata with credential
|
|
474
|
+
const accreditation = {
|
|
475
|
+
...credential.contentStream,
|
|
476
|
+
metadata: {
|
|
477
|
+
issuedCredentialId,
|
|
478
|
+
providerId,
|
|
479
|
+
providerCredentialId,
|
|
480
|
+
status,
|
|
481
|
+
statusUpdatedAt,
|
|
482
|
+
},
|
|
483
|
+
};
|
|
484
|
+
setCachedAccreditation(cacheKey, accreditation);
|
|
485
|
+
return accreditation;
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
// No tracking record, return just the credential (legacy)
|
|
489
|
+
setCachedAccreditation(cacheKey, credential.contentStream);
|
|
490
|
+
return credential.contentStream;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
catch (error) {
|
|
494
|
+
console.error(`Failed to process accreditation for URL: ${url}`, error);
|
|
495
|
+
return null;
|
|
496
|
+
}
|
|
497
|
+
finally {
|
|
498
|
+
inFlightAccreditations.delete(cacheKey);
|
|
499
|
+
}
|
|
500
|
+
})();
|
|
501
|
+
inFlightAccreditations.set(cacheKey, resolverPromise);
|
|
502
|
+
return resolverPromise;
|
|
503
|
+
};
|
|
504
|
+
// 3. Resolve resources and enhance with tracking metadata with bounded concurrency
|
|
505
|
+
const resolvedAccreditations = new Array(resourceUrls.length);
|
|
506
|
+
let currentIndex = 0;
|
|
507
|
+
const workers = Array.from({ length: Math.min(ACCREDITATION_RESOLVE_CONCURRENCY, resourceUrls.length) }, async () => {
|
|
508
|
+
// eslint-disable-next-line no-constant-condition
|
|
509
|
+
while (true) {
|
|
510
|
+
const index = currentIndex++;
|
|
511
|
+
if (index >= resourceUrls.length) {
|
|
512
|
+
break;
|
|
513
|
+
}
|
|
514
|
+
const accreditation = await resolveAccreditationWithCache(resourceUrls[index]);
|
|
515
|
+
if (accreditation) {
|
|
516
|
+
resolvedAccreditations[index] = accreditation;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
// 4. Wait for all resolutions to complete and filter out any failed/skipped ones (null)
|
|
521
|
+
await Promise.all(workers);
|
|
522
|
+
const accreditations = resolvedAccreditations.filter(Boolean);
|
|
523
|
+
return {
|
|
524
|
+
success: true,
|
|
525
|
+
status: StatusCodes.OK,
|
|
526
|
+
data: {
|
|
527
|
+
total: accreditations.length,
|
|
528
|
+
accreditations: accreditations,
|
|
529
|
+
},
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
catch (error) {
|
|
533
|
+
return {
|
|
534
|
+
success: false,
|
|
535
|
+
status: StatusCodes.INTERNAL_SERVER_ERROR,
|
|
536
|
+
error: `Internal error: ${error?.message || error}`,
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
}
|
|
124
540
|
}
|
|
125
541
|
//# sourceMappingURL=accreditation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accreditation.js","sourceRoot":"","sources":["../../../src/services/api/accreditation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accreditation.js","sourceRoot":"","sources":["../../../src/services/api/accreditation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-status.d.ts","sourceRoot":"","sources":["../../../src/services/api/credential-status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,8CAA8C,EAC9C,gDAAgD,EAEhD,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAsD,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACtH,OAAO,KAAK,EACX,oCAAoC,EACpC,qCAAqC,EACrC,+CAA+C,EAC/C,sCAAsC,EACtC,uCAAuC,EACvC,iDAAiD,EACjD,oCAAoC,EACpC,sCAAsC,EACtC,uCAAuC,EACvC,0BAA0B,EAC1B,2BAA2B,EAC3B,qBAAqB,EACrB,MAAM,kCAAkC,CAAC;AAe1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAoD,UAAU,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AAMzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAE7F,qBAAa,uBAAuB;IACnC,OAAc,QAAQ,0BAAiC;IAChD,UAAU,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC7C,0BAA0B,EAAE,UAAU,CAAC,sBAAsB,CAAC,CAAC;;IAMhE,2BAA2B,CAChC,IAAI,EAAE,sCAAsC,EAC5C,KAAK,EAAE,uCAAuC,EAC9C,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,UAAU,GACf,OAAO,CAAC;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,iDAAiD,GAAG,gDAAgD,CAAC;QAC5G,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAsKI,yBAAyB,CAC9B,IAAI,EAAE,oCAAoC,EAC1C,KAAK,EAAE,qCAAqC,EAC5C,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,UAAU,GACf,OAAO,CAAC;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,+CAA+C,GAAG,8CAA8C,CAAC;QACxG,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAkJI,2BAA2B,CAChC,IAAI,EAAE,sCAAsC,EAC5C,KAAK,EAAE,uCAAuC,EAC9C,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,UAAU,GACf,OAAO,CAAC;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAkJI,yBAAyB,CAC9B,IAAI,EAAE,oCAAoC,EAC1C,KAAK,EAAE,uCAAuC,EAC9C,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,UAAU,GACf,OAAO,CAAC;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAmKI,eAAe,CACpB,IAAI,EAAE,0BAA0B,EAChC,KAAK,EAAE,2BAA2B,EAClC,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,UAAU,GACf,OAAO,CAAC;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;
|
|
1
|
+
{"version":3,"file":"credential-status.d.ts","sourceRoot":"","sources":["../../../src/services/api/credential-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -475,7 +475,7 @@ export class CredentialStatusService {
|
|
|
475
475
|
async checkStatusList(body, query, customer, user) {
|
|
476
476
|
const feePaymentOptions = [];
|
|
477
477
|
// collect request parameters - case: body
|
|
478
|
-
const { did, statusListName, index, makeFeePayment, statusListCredential, statusSize, statusMessage } = body;
|
|
478
|
+
const { did, statusListName, index, indices, indexRangeEnd, indexRangeStart, makeFeePayment, statusListCredential, statusSize, statusMessage, } = body;
|
|
479
479
|
// collect request parameters - case: query
|
|
480
480
|
const { statusPurpose, listType } = query;
|
|
481
481
|
// Make the base body for tracking
|
|
@@ -497,7 +497,7 @@ export class CredentialStatusService {
|
|
|
497
497
|
success: false,
|
|
498
498
|
error: `check: error: 'statusListCredential' is required for BitstringStatusList type`,
|
|
499
499
|
};
|
|
500
|
-
if (statusSize && statusSize >
|
|
500
|
+
if (statusSize && statusSize > 2 && !statusMessage)
|
|
501
501
|
return {
|
|
502
502
|
statusCode: StatusCodes.BAD_REQUEST,
|
|
503
503
|
success: false,
|
|
@@ -555,13 +555,19 @@ export class CredentialStatusService {
|
|
|
555
555
|
}
|
|
556
556
|
// check status list
|
|
557
557
|
let result;
|
|
558
|
+
let statusListUrl = statusListCredential?.startsWith('did:cheqd:')
|
|
559
|
+
? `${process.env.RESOLVER_URL}${statusListCredential}`
|
|
560
|
+
: statusListCredential;
|
|
558
561
|
if (listType === StatusListType.Bitstring) {
|
|
559
562
|
result = await identityServiceStrategySetup.agent.checkBitstringStatusList(did, {
|
|
560
|
-
id:
|
|
563
|
+
id: index ? statusListUrl + '#' + index : undefined,
|
|
561
564
|
type: 'BitstringStatusListEntry',
|
|
562
565
|
statusPurpose,
|
|
563
|
-
statusListIndex: index
|
|
564
|
-
|
|
566
|
+
statusListIndex: index?.toString(),
|
|
567
|
+
statusListIndices: indices,
|
|
568
|
+
statusListRangeStart: indexRangeStart,
|
|
569
|
+
statusListRangeEnd: indexRangeEnd,
|
|
570
|
+
statusListCredential: statusListUrl || '',
|
|
565
571
|
statusSize: statusSize,
|
|
566
572
|
statusMessage: statusMessage,
|
|
567
573
|
}, customer);
|