@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.
Files changed (92) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +1 -0
  3. package/dist/app.js.map +1 -1
  4. package/dist/controllers/admin/webhook.js +1 -1
  5. package/dist/controllers/admin/webhook.js.map +1 -1
  6. package/dist/controllers/api/account.d.ts +32 -0
  7. package/dist/controllers/api/account.d.ts.map +1 -1
  8. package/dist/controllers/api/account.js +78 -0
  9. package/dist/controllers/api/account.js.map +1 -1
  10. package/dist/controllers/api/accreditation.d.ts +17 -11
  11. package/dist/controllers/api/accreditation.d.ts.map +1 -1
  12. package/dist/controllers/api/accreditation.js +127 -299
  13. package/dist/controllers/api/accreditation.js.map +1 -1
  14. package/dist/controllers/api/credential-status.d.ts +1 -9
  15. package/dist/controllers/api/credential-status.d.ts.map +1 -1
  16. package/dist/controllers/api/credential-status.js +65 -19
  17. package/dist/controllers/api/credential-status.js.map +1 -1
  18. package/dist/controllers/api/credential.d.ts.map +1 -1
  19. package/dist/controllers/api/credential.js +9 -12
  20. package/dist/controllers/api/credential.js.map +1 -1
  21. package/dist/middleware/auth/routes/api/account-auth.d.ts.map +1 -1
  22. package/dist/middleware/auth/routes/api/account-auth.js +2 -0
  23. package/dist/middleware/auth/routes/api/account-auth.js.map +1 -1
  24. package/dist/middleware/auth/routes/api/credential-auth.d.ts.map +1 -1
  25. package/dist/middleware/auth/routes/api/credential-auth.js +8 -2
  26. package/dist/middleware/auth/routes/api/credential-auth.js.map +1 -1
  27. package/dist/services/api/accreditation.d.ts +21 -4
  28. package/dist/services/api/accreditation.d.ts.map +1 -1
  29. package/dist/services/api/accreditation.js +432 -16
  30. package/dist/services/api/accreditation.js.map +1 -1
  31. package/dist/services/api/credential-status.d.ts.map +1 -1
  32. package/dist/services/api/credential-status.js +11 -5
  33. package/dist/services/api/credential-status.js.map +1 -1
  34. package/dist/services/api/credentials.d.ts +4 -1
  35. package/dist/services/api/credentials.d.ts.map +1 -1
  36. package/dist/services/api/credentials.js +57 -5
  37. package/dist/services/api/credentials.js.map +1 -1
  38. package/dist/services/api/identifier.d.ts +1 -0
  39. package/dist/services/api/identifier.d.ts.map +1 -1
  40. package/dist/services/api/identifier.js +8 -0
  41. package/dist/services/api/identifier.js.map +1 -1
  42. package/dist/services/api/resource.d.ts +5 -0
  43. package/dist/services/api/resource.d.ts.map +1 -1
  44. package/dist/services/api/resource.js +60 -0
  45. package/dist/services/api/resource.js.map +1 -1
  46. package/dist/services/helpers.d.ts.map +1 -1
  47. package/dist/services/helpers.js +2 -3
  48. package/dist/services/helpers.js.map +1 -1
  49. package/dist/services/identity/abstract.d.ts +3 -3
  50. package/dist/services/identity/abstract.d.ts.map +1 -1
  51. package/dist/services/identity/abstract.js +1 -1
  52. package/dist/services/identity/abstract.js.map +1 -1
  53. package/dist/services/identity/default.d.ts +3 -3
  54. package/dist/services/identity/default.d.ts.map +1 -1
  55. package/dist/services/identity/default.js +2 -2
  56. package/dist/services/identity/default.js.map +1 -1
  57. package/dist/services/identity/index.d.ts +4 -3
  58. package/dist/services/identity/index.d.ts.map +1 -1
  59. package/dist/services/identity/index.js.map +1 -1
  60. package/dist/services/identity/providers/dock/identity.d.ts +3 -1
  61. package/dist/services/identity/providers/dock/identity.d.ts.map +1 -1
  62. package/dist/services/identity/providers/dock/identity.js +24 -0
  63. package/dist/services/identity/providers/dock/identity.js.map +1 -1
  64. package/dist/services/identity/providers/studio/agent.d.ts +3 -3
  65. package/dist/services/identity/providers/studio/agent.d.ts.map +1 -1
  66. package/dist/services/identity/providers/studio/agent.js +36 -23
  67. package/dist/services/identity/providers/studio/agent.js.map +1 -1
  68. package/dist/services/identity/providers/studio/local.d.ts +1 -1
  69. package/dist/services/identity/providers/studio/local.d.ts.map +1 -1
  70. package/dist/services/identity/providers/studio/postgres.d.ts +14 -1
  71. package/dist/services/identity/providers/studio/postgres.d.ts.map +1 -1
  72. package/dist/services/identity/providers/studio/postgres.js +23 -0
  73. package/dist/services/identity/providers/studio/postgres.js.map +1 -1
  74. package/dist/services/track/admin/account-submitter.d.ts +1 -0
  75. package/dist/services/track/admin/account-submitter.d.ts.map +1 -1
  76. package/dist/services/track/admin/account-submitter.js +26 -4
  77. package/dist/services/track/admin/account-submitter.js.map +1 -1
  78. package/dist/static/swagger-api.json +149 -16
  79. package/dist/types/accreditation.d.ts +7 -2
  80. package/dist/types/accreditation.d.ts.map +1 -1
  81. package/dist/types/accreditation.js.map +1 -1
  82. package/dist/types/credential-status.d.ts +4 -1
  83. package/dist/types/credential-status.d.ts.map +1 -1
  84. package/dist/types/credential-status.js.map +1 -1
  85. package/dist/types/credential.d.ts +2 -1
  86. package/dist/types/credential.d.ts.map +1 -1
  87. package/dist/types/credential.js.map +1 -1
  88. package/dist/types/swagger-api-types.d.ts +54 -1
  89. package/dist/types/swagger-api-types.d.ts.map +1 -1
  90. package/dist/types/swagger-api-types.js +54 -1
  91. package/dist/types/swagger-api-types.js.map +1 -1
  92. 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 res = await identityServiceStrategySetup.agent.resolve(accreditationUrl);
15
- const result = await res.json();
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
- if (!allowDeactivatedDid &&
27
- (await isCredentialIssuerDidDeactivated(accreditation))) {
28
- return {
29
- success: false,
30
- status: StatusCodes.BAD_REQUEST,
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
- const accreditorDid = typeof accreditation.issuer === 'string' ? accreditation.issuer : accreditation.issuer.id;
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: initialVerifyResult,
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":"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"}
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 > 1 && !statusMessage)
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: statusListCredential + '#' + index,
563
+ id: index ? statusListUrl + '#' + index : undefined,
561
564
  type: 'BitstringStatusListEntry',
562
565
  statusPurpose,
563
- statusListIndex: index.toString(),
564
- statusListCredential: statusListCredential || '',
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);