@cheqd/studio 3.15.0-develop.1 → 3.15.0-develop.2

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 (130) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +3 -0
  3. package/dist/app.js.map +1 -1
  4. package/dist/controllers/api/accreditation.d.ts.map +1 -1
  5. package/dist/controllers/api/accreditation.js +36 -9
  6. package/dist/controllers/api/accreditation.js.map +1 -1
  7. package/dist/controllers/api/credential-status.d.ts +94 -0
  8. package/dist/controllers/api/credential-status.d.ts.map +1 -1
  9. package/dist/controllers/api/credential-status.js +220 -506
  10. package/dist/controllers/api/credential-status.js.map +1 -1
  11. package/dist/controllers/api/credential.d.ts +66 -0
  12. package/dist/controllers/api/credential.d.ts.map +1 -1
  13. package/dist/controllers/api/credential.js +117 -1
  14. package/dist/controllers/api/credential.js.map +1 -1
  15. package/dist/controllers/api/did.js.map +1 -1
  16. package/dist/controllers/api/key.js.map +1 -1
  17. package/dist/controllers/api/presentation.js +22 -21
  18. package/dist/controllers/api/presentation.js.map +1 -1
  19. package/dist/controllers/api/providers.controller.js.map +1 -1
  20. package/dist/controllers/api/resource.js.map +1 -1
  21. package/dist/database/entities/issued-credential.entity.d.ts +10 -1
  22. package/dist/database/entities/issued-credential.entity.d.ts.map +1 -1
  23. package/dist/database/entities/issued-credential.entity.js +22 -0
  24. package/dist/database/entities/issued-credential.entity.js.map +1 -1
  25. package/dist/database/entities/status-registry.entity.d.ts +60 -0
  26. package/dist/database/entities/status-registry.entity.d.ts.map +1 -0
  27. package/dist/database/entities/status-registry.entity.js +145 -0
  28. package/dist/database/entities/status-registry.entity.js.map +1 -0
  29. package/dist/database/migrations/1761834657128-studio-migrations.d.ts +7 -0
  30. package/dist/database/migrations/1761834657128-studio-migrations.d.ts.map +1 -0
  31. package/dist/database/migrations/1761834657128-studio-migrations.js +14 -0
  32. package/dist/database/migrations/1761834657128-studio-migrations.js.map +1 -0
  33. package/dist/database/migrations/1762775396083-MigrateStatusLists.d.ts +25 -0
  34. package/dist/database/migrations/1762775396083-MigrateStatusLists.d.ts.map +1 -0
  35. package/dist/database/migrations/1762775396083-MigrateStatusLists.js +243 -0
  36. package/dist/database/migrations/1762775396083-MigrateStatusLists.js.map +1 -0
  37. package/dist/database/migrations/1762775500000-UpdateWriteCursors.d.ts +23 -0
  38. package/dist/database/migrations/1762775500000-UpdateWriteCursors.d.ts.map +1 -0
  39. package/dist/database/migrations/1762775500000-UpdateWriteCursors.js +181 -0
  40. package/dist/database/migrations/1762775500000-UpdateWriteCursors.js.map +1 -0
  41. package/dist/database/types/types.d.ts.map +1 -1
  42. package/dist/database/types/types.js +10 -0
  43. package/dist/database/types/types.js.map +1 -1
  44. package/dist/helpers/mailchimp.d.ts.map +1 -1
  45. package/dist/helpers/mailchimp.js +1 -3
  46. package/dist/helpers/mailchimp.js.map +1 -1
  47. package/dist/middleware/auth/routes/api/credential-status-auth.d.ts.map +1 -1
  48. package/dist/middleware/auth/routes/api/credential-status-auth.js +2 -0
  49. package/dist/middleware/auth/routes/api/credential-status-auth.js.map +1 -1
  50. package/dist/services/api/credential-status.d.ts +107 -0
  51. package/dist/services/api/credential-status.d.ts.map +1 -0
  52. package/dist/services/api/credential-status.js +923 -0
  53. package/dist/services/api/credential-status.js.map +1 -0
  54. package/dist/services/api/credentials.d.ts +12 -0
  55. package/dist/services/api/credentials.d.ts.map +1 -1
  56. package/dist/services/api/credentials.js +330 -117
  57. package/dist/services/api/credentials.js.map +1 -1
  58. package/dist/services/connectors/resource.js.map +1 -1
  59. package/dist/services/identity/abstract.d.ts +1 -1
  60. package/dist/services/identity/abstract.d.ts.map +1 -1
  61. package/dist/services/identity/abstract.js +1 -1
  62. package/dist/services/identity/abstract.js.map +1 -1
  63. package/dist/services/identity/default.d.ts +1 -1
  64. package/dist/services/identity/default.d.ts.map +1 -1
  65. package/dist/services/identity/default.js +2 -2
  66. package/dist/services/identity/default.js.map +1 -1
  67. package/dist/services/identity/index.d.ts +1 -1
  68. package/dist/services/identity/index.d.ts.map +1 -1
  69. package/dist/services/identity/providers/studio/agent.d.ts +6 -6
  70. package/dist/services/identity/providers/studio/agent.d.ts.map +1 -1
  71. package/dist/services/identity/providers/studio/agent.js +11 -2
  72. package/dist/services/identity/providers/studio/agent.js.map +1 -1
  73. package/dist/services/identity/providers/studio/local.d.ts +3 -3
  74. package/dist/services/identity/providers/studio/postgres.d.ts +3 -3
  75. package/dist/services/identity/providers/studio/postgres.d.ts.map +1 -1
  76. package/dist/services/identity/providers/studio/postgres.js +0 -12
  77. package/dist/services/identity/providers/studio/postgres.js.map +1 -1
  78. package/dist/services/track/api/credential-status-subscriber.d.ts +4 -4
  79. package/dist/services/track/api/credential-status-subscriber.d.ts.map +1 -1
  80. package/dist/services/track/api/credential-status-subscriber.js +18 -1
  81. package/dist/services/track/api/credential-status-subscriber.js.map +1 -1
  82. package/dist/services/track/api/credential-subscriber.d.ts +4 -4
  83. package/dist/services/track/api/credential-subscriber.d.ts.map +1 -1
  84. package/dist/services/track/api/credential-subscriber.js.map +1 -1
  85. package/dist/services/track/api/did-subscriber.d.ts +4 -4
  86. package/dist/services/track/api/did-subscriber.d.ts.map +1 -1
  87. package/dist/services/track/api/did-subscriber.js.map +1 -1
  88. package/dist/services/track/api/key-subscriber.d.ts +4 -4
  89. package/dist/services/track/api/key-subscriber.d.ts.map +1 -1
  90. package/dist/services/track/api/key-subscriber.js.map +1 -1
  91. package/dist/services/track/api/presentation-subscriber.d.ts +4 -4
  92. package/dist/services/track/api/presentation-subscriber.d.ts.map +1 -1
  93. package/dist/services/track/api/presentation-subscriber.js.map +1 -1
  94. package/dist/services/track/api/resource-subscriber.d.ts +4 -4
  95. package/dist/services/track/api/resource-subscriber.d.ts.map +1 -1
  96. package/dist/services/track/api/resource-subscriber.js.map +1 -1
  97. package/dist/services/track/base.d.ts +2 -2
  98. package/dist/services/track/base.d.ts.map +1 -1
  99. package/dist/services/track/base.js.map +1 -1
  100. package/dist/services/track/operation-subscriber.d.ts +4 -4
  101. package/dist/services/track/operation-subscriber.d.ts.map +1 -1
  102. package/dist/services/track/operation-subscriber.js.map +1 -1
  103. package/dist/services/track/tracker.d.ts +2 -2
  104. package/dist/services/track/tracker.d.ts.map +1 -1
  105. package/dist/services/track/tracker.js.map +1 -1
  106. package/dist/services/track/types.d.ts +2 -2
  107. package/dist/services/track/types.d.ts.map +1 -1
  108. package/dist/static/swagger-api.json +560 -46
  109. package/dist/types/accreditation.d.ts +3 -0
  110. package/dist/types/accreditation.d.ts.map +1 -1
  111. package/dist/types/constants.d.ts +2 -0
  112. package/dist/types/constants.d.ts.map +1 -1
  113. package/dist/types/constants.js +2 -0
  114. package/dist/types/constants.js.map +1 -1
  115. package/dist/types/credential-status.d.ts +39 -1
  116. package/dist/types/credential-status.d.ts.map +1 -1
  117. package/dist/types/credential-status.js +7 -0
  118. package/dist/types/credential-status.js.map +1 -1
  119. package/dist/types/credential.d.ts +21 -3
  120. package/dist/types/credential.d.ts.map +1 -1
  121. package/dist/types/credential.js +5 -0
  122. package/dist/types/credential.js.map +1 -1
  123. package/dist/types/swagger-api-types.d.ts +242 -39
  124. package/dist/types/swagger-api-types.d.ts.map +1 -1
  125. package/dist/types/swagger-api-types.js +242 -39
  126. package/dist/types/swagger-api-types.js.map +1 -1
  127. package/dist/types/track.d.ts +8 -6
  128. package/dist/types/track.d.ts.map +1 -1
  129. package/dist/types/track.js.map +1 -1
  130. package/package.json +1 -1
@@ -0,0 +1,243 @@
1
+ import { ResourceEntity } from '../entities/resource.entity.js';
2
+ import { StatusRegistryEntity } from '../entities/status-registry.entity.js';
3
+ import { StatusRegistryState } from '../../types/credential-status.js';
4
+ import { CredentialCategory } from '../../types/credential.js';
5
+ import { gunzipSync } from 'zlib';
6
+ /**
7
+ * Migrates existing Status List resources from ResourceEntity to StatusRegistryEntity
8
+ * This migration:
9
+ * 1. Finds all ResourceEntity records with resourceType='BitstringStatusListCredential' | 'StatusList2021Revocation' | 'StatusList2021Suspension' | 'StatusList2021'
10
+ * 2. Resolves status list data from DID URLs via resolver
11
+ * 3. Creates corresponding StatusRegistryEntity records'
12
+ */
13
+ export class MigrationsStatusLists1762775396083 {
14
+ RESOLVER_URL = 'https://resolver.cheqd.net/1.0/identifiers';
15
+ BATCH_SIZE = 50; // Process statuslists in batches to avoid memory issues
16
+ async up(queryRunner) {
17
+ console.log('Starting Studio status list migration...');
18
+ // Find all status list resources
19
+ const statusListResources = await queryRunner.manager.find(ResourceEntity, {
20
+ where: [
21
+ { resourceType: 'BitstringStatusListCredential' },
22
+ { resourceType: 'StatusList2021Revocation' },
23
+ { resourceType: 'StatusList2021Suspension' },
24
+ { resourceType: 'StatusList2021' },
25
+ ],
26
+ relations: ['identifier', 'customer'],
27
+ });
28
+ console.log(`Found ${statusListResources.length} statuslist resources`);
29
+ if (statusListResources.length === 0) {
30
+ console.log('No statuslist to migrate');
31
+ return;
32
+ }
33
+ let successCount = 0;
34
+ let skippedCount = 0;
35
+ let errorCount = 0;
36
+ const errors = [];
37
+ // Remove duplicates by DID URL (constructed per resource) using a Set to keep first occurrence
38
+ const seen = new Set();
39
+ const uniqueStatusLists = statusListResources.filter((res) => {
40
+ const did = res?.identifier?.did ?? '';
41
+ const didUrl = `${did}?resourceName=${res.resourceName}&resourceType=${res.resourceType}`;
42
+ if (seen.has(didUrl))
43
+ return false;
44
+ seen.add(didUrl);
45
+ return true;
46
+ });
47
+ console.log(`${uniqueStatusLists.length} statuslist resources are unique and ready to migrate`);
48
+ // Process statuslist in batches
49
+ for (let i = 0; i < uniqueStatusLists.length; i += this.BATCH_SIZE) {
50
+ const batch = uniqueStatusLists.slice(i, i + this.BATCH_SIZE);
51
+ for (const resource of batch) {
52
+ try {
53
+ const didUrl = `${resource.identifier.did}?resourceName=${resource.resourceName}&resourceType=${resource.resourceType}`;
54
+ // Check if already migrated
55
+ const existing = await queryRunner.manager.findOne(StatusRegistryEntity, {
56
+ where: {
57
+ uri: didUrl,
58
+ },
59
+ });
60
+ if (existing) {
61
+ skippedCount++;
62
+ continue;
63
+ }
64
+ // Resolve statuslist from DID URL
65
+ const statuslist = await this.resolveStatusListResource(didUrl);
66
+ if (!statuslist || !statuslist.resource) {
67
+ throw new Error(`Failed to resolve statuslist from ${didUrl}`);
68
+ }
69
+ // Calculate registry size from the encoded list
70
+ const registrySize = this.calculateRegistrySize(statuslist.resource);
71
+ // Determine issuance/created date depending on the resolved resource shape
72
+ let createdDate;
73
+ const resAny = statuslist.resource;
74
+ if (resAny?.bitstringStatusListCredential) {
75
+ createdDate = resAny.bitstringStatusListCredential?.issuanceDate;
76
+ }
77
+ else if (resAny?.StatusList2021?.validFrom) {
78
+ createdDate = resAny.StatusList2021.validFrom;
79
+ }
80
+ else {
81
+ createdDate = new Date().toISOString();
82
+ }
83
+ // Create StatusRegistryEntity
84
+ const statusRegistryEntity = new StatusRegistryEntity({
85
+ uri: `${resource.identifier.did}?resourceName=${resource.resourceName}&resourceType=${resource.resourceType}`,
86
+ registryType: resource.resourceType,
87
+ registryName: resource.resourceName,
88
+ credentialCategory: CredentialCategory.CREDENTIAL,
89
+ version: 0, // default version to 0 for migrated lists
90
+ registrySize: registrySize,
91
+ writeCursor: 0, // default writeCursor to 0 for migrated lists
92
+ state: StatusRegistryState.Active,
93
+ storageType: 'cheqd',
94
+ metadata: {
95
+ migratedFrom: 'ResourceEntity',
96
+ originalResourceId: resource.resourceId,
97
+ encoding: statuslist.resource.metadata.encoding,
98
+ },
99
+ identifier: resource.identifier,
100
+ customer: resource.customer,
101
+ deprecated: false,
102
+ encrypted: resource.encrypted || false,
103
+ threshold_percentage: 80,
104
+ createdAt: new Date(createdDate),
105
+ });
106
+ await queryRunner.manager.save(StatusRegistryEntity, statusRegistryEntity);
107
+ successCount++;
108
+ if (successCount % 10 === 0) {
109
+ console.log(` Migrated ${successCount} statuslist so far...`);
110
+ }
111
+ }
112
+ catch (error) {
113
+ errorCount++;
114
+ const errorMessage = error instanceof Error ? error.message : String(error);
115
+ errors.push({
116
+ resourceId: resource.resourceId,
117
+ error: errorMessage,
118
+ });
119
+ console.error(` Error migrating statuslist ${resource.resourceId}:`, errorMessage);
120
+ // Continue with next statuslist
121
+ }
122
+ }
123
+ // Small delay between batches
124
+ if (i + this.BATCH_SIZE < statusListResources.length) {
125
+ await new Promise((resolve) => setTimeout(resolve, 500));
126
+ }
127
+ }
128
+ console.log(`\nMigration completed:`);
129
+ console.log(` Successfully migrated: ${successCount}`);
130
+ console.log(` Skipped (already migrated): ${skippedCount}`);
131
+ console.log(` Errors: ${errorCount}\n`);
132
+ console.log(` Total processed: ${successCount + skippedCount + errorCount}/${statusListResources.length}`);
133
+ if (errors.length > 0) {
134
+ console.log(`\nErrors encountered (first 10):`);
135
+ errors.slice(0, 10).forEach(({ resourceId, error }) => {
136
+ console.log(` - ${resourceId}: ${error}`);
137
+ });
138
+ if (errors.length > 10) {
139
+ console.log(` ... and ${errors.length - 10} more errors`);
140
+ }
141
+ }
142
+ }
143
+ async down(queryRunner) {
144
+ console.log('Rolling back Studio statuslist migration...');
145
+ // Delete all StatusRegistryEntity records that were migrated from ResourceEntity
146
+ const result = await queryRunner.manager
147
+ .createQueryBuilder()
148
+ .delete()
149
+ .from(StatusRegistryEntity)
150
+ .andWhere("metadata->>'migratedFrom' = :migratedFrom", { migratedFrom: 'ResourceEntity' })
151
+ .execute();
152
+ console.log(`Rolled back ${result.affected} migrated statuslists`);
153
+ }
154
+ /**
155
+ * Calculate registry size from the statuslist resource
156
+ * For BitstringStatusList: get from metadata.length
157
+ * For StatusList2021: calculate from encodedList based on encoding (base64url or hex)
158
+ */
159
+ calculateRegistrySize(resource) {
160
+ try {
161
+ // Default size if we can't determine
162
+ const DEFAULT_SIZE = 131072; // 128KB * 8 bits = 131,072 bits (default from design)
163
+ // Check if BitstringStatusList - has metadata.length property
164
+ const metadata = resource?.metadata;
165
+ if (metadata && metadata.length) {
166
+ console.log(` BitstringStatusList size from metadata: ${metadata.length}`);
167
+ return metadata.length;
168
+ }
169
+ // For StatusList2021, extract encodedList and calculate size based on encoding
170
+ // The structure is: { StatusList2021: { encodedList: "..." }, metadata: { encoding: "..." } }
171
+ const encodedList = resource?.StatusList2021?.encodedList;
172
+ const encoding = metadata?.encoding || 'base64url'; // Default to base64url
173
+ if (!encodedList || typeof encodedList !== 'string') {
174
+ console.warn(' No encodedList found, using default size');
175
+ return DEFAULT_SIZE;
176
+ }
177
+ let byteLength;
178
+ let compressed;
179
+ if (encoding === 'hex') {
180
+ compressed = Buffer.from(encodedList, 'hex');
181
+ }
182
+ else {
183
+ const cleaned = encodedList.replace(/-/g, '+').replace(/_/g, '/').replace(/=/g, '');
184
+ compressed = Buffer.from(cleaned, 'base64');
185
+ }
186
+ // gunzipSync expects a Uint8Array/DataView in some typings; convert Buffer to Uint8Array to satisfy TS type
187
+ const decompressed = gunzipSync(Uint8Array.from(compressed));
188
+ // Determine byte length from decompressed data
189
+ byteLength = decompressed.length ?? decompressed.length;
190
+ const bitLength = byteLength * 8;
191
+ console.log(` StatusList2021 calculated size (encoding: ${encoding}): ${bitLength}`);
192
+ return bitLength > 0 ? bitLength : DEFAULT_SIZE;
193
+ }
194
+ catch (error) {
195
+ console.warn(' Error calculating registry size:', error);
196
+ return 131072; // Default fallback
197
+ }
198
+ }
199
+ /**
200
+ * Resolve statuslist from DID URL using the resolver
201
+ */
202
+ async resolveStatusListResource(didUrl) {
203
+ try {
204
+ // Build resolver URL for metadata first
205
+ const url = new URL(`${this.RESOLVER_URL}/${didUrl}`);
206
+ console.log(` Resolving statuslist resource from ${url.toString()}`);
207
+ // Fetch resource metadata (did-url-dereferencing profile)
208
+ const metaResp = await fetch(`${this.RESOLVER_URL}/${didUrl}`, {
209
+ headers: {
210
+ Accept: 'application/ld+json;profile=https://w3id.org/did-url-dereferencing',
211
+ },
212
+ });
213
+ if (!metaResp.ok) {
214
+ throw new Error(`HTTP ${metaResp.status}: ${metaResp.statusText}`);
215
+ }
216
+ const resourceMetadataVersioned = (await metaResp.json());
217
+ // Handle resolver-level errors
218
+ const arbitraryError = resourceMetadataVersioned?.dereferencingMetadata?.error;
219
+ if (arbitraryError) {
220
+ console.error(` Resolver error for ${didUrl}: ${String(arbitraryError)}`);
221
+ return null;
222
+ }
223
+ // If no linked resource metadata, nothing to fetch
224
+ if (!resourceMetadataVersioned?.contentMetadata) {
225
+ console.error(` Unable to determine resource metadata for ${didUrl}`);
226
+ return null;
227
+ }
228
+ // Choose latest resource metadata: prefer entry without nextVersionId, else most recently created
229
+ const resourceMetadata = resourceMetadataVersioned.contentMetadata;
230
+ const resource = resourceMetadataVersioned.contentStream;
231
+ return {
232
+ resource,
233
+ resourceMetadata,
234
+ };
235
+ }
236
+ catch (error) {
237
+ const errorMessage = error instanceof Error ? error.message : String(error);
238
+ console.error(` Failed to resolve ${didUrl}: ${errorMessage}`);
239
+ return null;
240
+ }
241
+ }
242
+ }
243
+ //# sourceMappingURL=1762775396083-MigrateStatusLists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1762775396083-MigrateStatusLists.js","sourceRoot":"","sources":["../../../src/database/migrations/1762775396083-MigrateStatusLists.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ /**
3
+ * Updates writeCursor and additionalUsedIndexes for StatusRegistryEntity based on actual credential issuance
4
+ * This migration:
5
+ * 1. Queries IssuedCredential table for all credentials with credentialStatus
6
+ * 2. Groups credentials by their status list URI
7
+ * 3. For each status registry:
8
+ * - Finds all used indexes
9
+ * - Determines the sequential run from the beginning
10
+ * - Sets writeCursor to the last sequential index
11
+ * - Stores non-sequential indexes in metadata.additionalUsedIndexes
12
+ */
13
+ export declare class UpdateWriteCursors1762775500000 implements MigrationInterface {
14
+ up(queryRunner: QueryRunner): Promise<void>;
15
+ down(queryRunner: QueryRunner): Promise<void>;
16
+ /**
17
+ * Analyze indexes to find sequential run and non-sequential indexes
18
+ * @param sortedIndexes - Array of unique indexes sorted in ascending order
19
+ * @returns Object with writeCursor and additionalUsedIndexes
20
+ */
21
+ private analyzeIndexes;
22
+ }
23
+ //# sourceMappingURL=1762775500000-UpdateWriteCursors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1762775500000-UpdateWriteCursors.d.ts","sourceRoot":"","sources":["../../../src/database/migrations/1762775500000-UpdateWriteCursors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI1D;;;;;;;;;;GAUG;AACH,qBAAa,+BAAgC,YAAW,kBAAkB;IAC5D,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA0I3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD1D;;;;OAIG;IACH,OAAO,CAAC,cAAc;CA6BtB"}
@@ -0,0 +1,181 @@
1
+ import { StatusRegistryEntity } from '../entities/status-registry.entity.js';
2
+ import { IssuedCredentialEntity } from '../entities/issued-credential.entity.js';
3
+ /**
4
+ * Updates writeCursor and additionalUsedIndexes for StatusRegistryEntity based on actual credential issuance
5
+ * This migration:
6
+ * 1. Queries IssuedCredential table for all credentials with credentialStatus
7
+ * 2. Groups credentials by their status list URI
8
+ * 3. For each status registry:
9
+ * - Finds all used indexes
10
+ * - Determines the sequential run from the beginning
11
+ * - Sets writeCursor to the last sequential index
12
+ * - Stores non-sequential indexes in metadata.additionalUsedIndexes
13
+ */
14
+ export class UpdateWriteCursors1762775500000 {
15
+ async up(queryRunner) {
16
+ await queryRunner.query(`ALTER TABLE "issuedCredential" ADD "statusIndex" integer`);
17
+ await queryRunner.query(`ALTER TABLE "issuedCredential" ADD "retryCount" integer NOT NULL DEFAULT '0'`);
18
+ await queryRunner.query(`ALTER TABLE "issuedCredential" ADD "lastError" text`);
19
+ await queryRunner.query(`ALTER TABLE "issuedCredential" ADD "statusRegistryId" character varying`);
20
+ await queryRunner.query(`ALTER TABLE "issuedCredential" ADD CONSTRAINT "FK_6b4613d35ce2050a5f1594bc3d4" FOREIGN KEY ("statusRegistryId") REFERENCES "statusRegistry"("registryId") ON DELETE NO ACTION ON UPDATE NO ACTION`);
21
+ console.log('Starting writeCursor update migration...');
22
+ // Get all status registries
23
+ const statusRegistries = await queryRunner.manager.find(StatusRegistryEntity, {
24
+ relations: ['customer'],
25
+ });
26
+ console.log(`Found ${statusRegistries.length} status registries to process`);
27
+ let updatedCount = 0;
28
+ let skippedCount = 0;
29
+ for (const registry of statusRegistries) {
30
+ try {
31
+ console.log(`\nProcessing registry: ${registry.registryId} (${registry.uri})`);
32
+ // Query all issued credentials that reference this status list URI
33
+ // The credentialStatus contains resolver URLs, but we need to match the DID URL portion
34
+ // Example: credentialStatus.id = "https://resolver.cheqd.net/1.0/identifiers/did:cheqd:testnet:...#123"
35
+ // We need to extract the DID URL and match it against registry.uri
36
+ const credentials = await queryRunner.manager
37
+ .createQueryBuilder(IssuedCredentialEntity, 'ic')
38
+ .where('"ic"."credentialStatus" IS NOT NULL')
39
+ .andWhere('("ic"."credentialStatus"->>\'id\' LIKE :uriPattern OR "ic"."credentialStatus"->>\'statusListCredential\' LIKE :uriPattern)', {
40
+ uriPattern: `%${registry.uri}%`,
41
+ })
42
+ .getMany();
43
+ if (credentials.length === 0) {
44
+ console.log(` No credentials found, keeping writeCursor at ${registry.writeCursor}`);
45
+ skippedCount++;
46
+ continue;
47
+ }
48
+ // Extract statusListIndex values and filter out invalid ones
49
+ const indexes = [];
50
+ for (const cred of credentials) {
51
+ const statusListIndex = cred.credentialStatus?.statusListIndex;
52
+ if (statusListIndex !== null && statusListIndex !== undefined) {
53
+ const indexNum = parseInt(String(statusListIndex), 10);
54
+ if (!isNaN(indexNum) && indexNum >= 0) {
55
+ indexes.push(indexNum);
56
+ }
57
+ }
58
+ }
59
+ if (indexes.length === 0) {
60
+ console.log(` No valid indexes found, keeping writeCursor at ${registry.writeCursor}`);
61
+ skippedCount++;
62
+ continue;
63
+ }
64
+ // Sort indexes in ascending order
65
+ indexes.sort((a, b) => a - b);
66
+ // Remove duplicates
67
+ const uniqueIndexes = [...new Set(indexes)];
68
+ console.log(` Found ${uniqueIndexes.length} unique indexes: [${uniqueIndexes.slice(0, 10).join(', ')}${uniqueIndexes.length > 10 ? '...' : ''}]`);
69
+ // Find the sequential run from the beginning
70
+ const { writeCursor, additionalUsedIndexes } = this.analyzeIndexes(uniqueIndexes);
71
+ console.log(` Sequential run ends at: ${writeCursor}`);
72
+ if (additionalUsedIndexes.length > 0) {
73
+ console.log(` Non-sequential indexes: [${additionalUsedIndexes.slice(0, 10).join(', ')}${additionalUsedIndexes.length > 10 ? '...' : ''}]`);
74
+ }
75
+ // Update the status registry
76
+ const currentMetadata = registry.metadata || {};
77
+ const updatedMetadata = {
78
+ ...currentMetadata,
79
+ ...(additionalUsedIndexes.length > 0 ? { additionalUsedIndexes } : {}),
80
+ };
81
+ await queryRunner.manager.update(StatusRegistryEntity, { registryId: registry.registryId }, {
82
+ writeCursor: writeCursor,
83
+ // Pass metadata as a raw JSON string expression so TypeORM accepts it for update operations
84
+ metadata: () => `'${JSON.stringify(updatedMetadata).replace(/'/g, "''")}'`,
85
+ });
86
+ console.log(` ✓ Updated writeCursor to ${writeCursor}`);
87
+ // Update IssuedCredential records to populate new fields
88
+ let credentialUpdateCount = 0;
89
+ for (const credential of credentials) {
90
+ const statusListIndex = credential.credentialStatus?.statusListIndex;
91
+ if (statusListIndex !== null && statusListIndex !== undefined) {
92
+ const indexNum = parseInt(String(statusListIndex), 10);
93
+ if (!isNaN(indexNum) && indexNum >= 0) {
94
+ await queryRunner.manager.update(IssuedCredentialEntity, { issuedCredentialId: credential.issuedCredentialId }, {
95
+ statusRegistry: registry,
96
+ statusIndex: indexNum,
97
+ retryCount: 0,
98
+ lastError: undefined,
99
+ });
100
+ credentialUpdateCount++;
101
+ }
102
+ }
103
+ }
104
+ console.log(` ✓ Updated ${credentialUpdateCount} issued credentials`);
105
+ updatedCount++;
106
+ }
107
+ catch (error) {
108
+ console.error(` ✗ Error processing registry ${registry.registryId}:`, error);
109
+ // Continue with next registry
110
+ }
111
+ }
112
+ console.log(`\nMigration complete:`);
113
+ console.log(` - Updated: ${updatedCount} registries`);
114
+ console.log(` - Skipped: ${skippedCount} registries`);
115
+ }
116
+ async down(queryRunner) {
117
+ console.log('Rolling back writeCursor update migration...');
118
+ // Reset all writeCursor values to 0 and remove additionalUsedIndexes from metadata
119
+ const registries = await queryRunner.manager.find(StatusRegistryEntity);
120
+ for (const registry of registries) {
121
+ const metadata = registry.metadata || {};
122
+ // Remove additionalUsedIndexes if present
123
+ if (metadata.additionalUsedIndexes) {
124
+ delete metadata.additionalUsedIndexes;
125
+ }
126
+ const metadataValue = Object.keys(metadata).length > 0
127
+ ? () => `'${JSON.stringify(metadata).replace(/'/g, "''")}'`
128
+ : undefined;
129
+ await queryRunner.manager.update(StatusRegistryEntity, { registryId: registry.registryId }, {
130
+ writeCursor: 0,
131
+ metadata: metadataValue,
132
+ });
133
+ }
134
+ console.log(`Rolled back ${registries.length} registries`);
135
+ // Reset IssuedCredential fields before dropping columns (if they exist)
136
+ try {
137
+ await queryRunner.query(`UPDATE "issuedCredential" SET "statusRegistryId" = NULL, "statusIndex" = NULL, "retryCount" = 0, "lastError" = NULL WHERE "statusRegistryId" IS NOT NULL`);
138
+ console.log('Cleared IssuedCredential status fields');
139
+ }
140
+ catch (error) {
141
+ // Columns might not exist if migration was partially applied
142
+ console.log('Skipped clearing IssuedCredential fields (columns may not exist)');
143
+ }
144
+ // Drop the new columns and foreign key constraint
145
+ await queryRunner.query(`ALTER TABLE "issuedCredential" DROP CONSTRAINT IF EXISTS "FK_6b4613d35ce2050a5f1594bc3d4"`);
146
+ await queryRunner.query(`ALTER TABLE "issuedCredential" DROP COLUMN IF EXISTS "statusRegistryId"`);
147
+ await queryRunner.query(`ALTER TABLE "issuedCredential" DROP COLUMN IF EXISTS "lastError"`);
148
+ await queryRunner.query(`ALTER TABLE "issuedCredential" DROP COLUMN IF EXISTS "retryCount"`);
149
+ await queryRunner.query(`ALTER TABLE "issuedCredential" DROP COLUMN IF EXISTS "statusIndex"`);
150
+ console.log('Dropped IssuedCredential columns');
151
+ }
152
+ /**
153
+ * Analyze indexes to find sequential run and non-sequential indexes
154
+ * @param sortedIndexes - Array of unique indexes sorted in ascending order
155
+ * @returns Object with writeCursor and additionalUsedIndexes
156
+ */
157
+ analyzeIndexes(sortedIndexes) {
158
+ if (sortedIndexes.length === 0) {
159
+ return { writeCursor: 0, additionalUsedIndexes: [] };
160
+ }
161
+ // Find the longest sequential run from the start
162
+ // Sequential means each number is exactly 1 more than the previous
163
+ let writeCursor = sortedIndexes[0];
164
+ let i = 1;
165
+ while (i < sortedIndexes.length) {
166
+ // Check if this index is sequential (current = previous + 1)
167
+ if (sortedIndexes[i] === writeCursor + 1) {
168
+ writeCursor = sortedIndexes[i];
169
+ i++;
170
+ }
171
+ else {
172
+ // Found a gap, stop the sequential run
173
+ break;
174
+ }
175
+ }
176
+ // All remaining indexes are non-sequential
177
+ const additionalUsedIndexes = sortedIndexes.slice(i);
178
+ return { writeCursor, additionalUsedIndexes };
179
+ }
180
+ }
181
+ //# sourceMappingURL=1762775500000-UpdateWriteCursors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1762775500000-UpdateWriteCursors.js","sourceRoot":"","sources":["../../../src/database/migrations/1762775500000-UpdateWriteCursors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/database/types/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAwDrC,MAAM,WAAW,gBAAgB;IAChC,KAAK,IAAI,UAAU,CAAC;CACpB;AAED,qBAAa,MAAO,YAAW,gBAAgB;IAC9C,KAAK,IAAI,UAAU;CAWnB;AAED,qBAAa,QAAS,YAAW,gBAAgB;IAChD,KAAK,IAAI,UAAU;CA2FnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/database/types/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA4DrC,MAAM,WAAW,gBAAgB;IAChC,KAAK,IAAI,UAAU,CAAC;CACpB;AAED,qBAAa,MAAO,YAAW,gBAAgB;IAC9C,KAAK,IAAI,UAAU;CAWnB;AAED,qBAAa,QAAS,YAAW,gBAAgB;IAChD,KAAK,IAAI,UAAU;CAiGnB"}
@@ -17,6 +17,7 @@ import { SubscriptionEntity } from '../entities/subscription.entity.js';
17
17
  import { CredentialProviderEntity } from '../entities/credential-provider.entity.js';
18
18
  import { ProviderConfigurationEntity } from '../entities/provider-configuration.entity.js';
19
19
  import { IssuedCredentialEntity } from '../entities/issued-credential.entity.js';
20
+ import { StatusRegistryEntity } from '../entities/status-registry.entity.js';
20
21
  import { CreatePaymentTable1695740345977 } from '../migrations/archive/CreatePaymentTable.js';
21
22
  import { CreateOperationTable1695740345977 } from '../migrations/archive/CreateOperationTable.js';
22
23
  import { CreateCustomersTable1683723285946 } from '../migrations/archive/CreateCustomersTable.js';
@@ -48,6 +49,9 @@ import { StudioMigrations1758011998054 } from '../migrations/1758011998054-studi
48
49
  import { StudioMigrations1760533089289 } from '../migrations/1760533089289-studio-migrations.js';
49
50
  import { MigrateStudioCredentials1760533089389 } from '../migrations/1760533089389-MigrateStudioCredentials.js';
50
51
  import { MigrateDockCredentials1760533089589 } from '../migrations/1760533089589-MigrateDockCredentials.js';
52
+ import { StudioMigrations1761834657128 } from '../migrations/1761834657128-studio-migrations.js';
53
+ import { MigrationsStatusLists1762775396083 } from '../migrations/1762775396083-MigrateStatusLists.js';
54
+ import { UpdateWriteCursors1762775500000 } from '../migrations/1762775500000-UpdateWriteCursors.js';
51
55
  dotenv.config();
52
56
  const { EXTERNAL_DB_CONNECTION_URL, EXTERNAL_DB_CERT } = process.env;
53
57
  export class Memory {
@@ -132,6 +136,11 @@ export class Postgres {
132
136
  MigrateStudioCredentials1760533089389,
133
137
  // Migrate Dock credentials to IssuedCredential table
134
138
  MigrateDockCredentials1760533089589,
139
+ // Add StatusRegistry table
140
+ StudioMigrations1761834657128,
141
+ // Migrate status lists to StatusRegistry table
142
+ MigrationsStatusLists1762775396083,
143
+ UpdateWriteCursors1762775500000,
135
144
  ],
136
145
  entities: [
137
146
  ...Entities,
@@ -150,6 +159,7 @@ export class Postgres {
150
159
  CredentialProviderEntity,
151
160
  ProviderConfigurationEntity,
152
161
  IssuedCredentialEntity,
162
+ StatusRegistryEntity,
153
163
  ],
154
164
  logging: ['error', 'info', 'warn'],
155
165
  });
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/database/types/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/database/types/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mailchimp.d.ts","sourceRoot":"","sources":["../../src/helpers/mailchimp.ts"],"names":[],"mappings":"AAMA,qBAAa,gBAAgB;;IAYtB,gBAAgB,CACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,IAAI,CAAC;CA+BhB"}
1
+ {"version":3,"file":"mailchimp.d.ts","sourceRoot":"","sources":["../../src/helpers/mailchimp.ts"],"names":[],"mappings":"AAMA,qBAAa,gBAAgB;;IAYtB,gBAAgB,CACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,IAAI,CAAC;CA6BhB"}
@@ -29,9 +29,7 @@ export class MailchimpService {
29
29
  });
30
30
  if (tags && tags.length > 0) {
31
31
  const current = (await mailchimp.lists.getListMemberTags(listId, subscriberHash));
32
- const existingActive = new Set((current?.tags ?? [])
33
- .filter((t) => t.status === 'active')
34
- .map((t) => t.name));
32
+ const existingActive = new Set((current?.tags ?? []).filter((t) => t.status === 'active').map((t) => t.name));
35
33
  const missing = tags.filter((t) => !existingActive.has(t));
36
34
  if (missing.length > 0) {
37
35
  await mailchimp.lists.updateListMemberTags(listId, subscriberHash, {
@@ -1 +1 @@
1
- {"version":3,"file":"mailchimp.js","sourceRoot":"","sources":["../../src/helpers/mailchimp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,SAAS,MAAM,gCAAgC,CAAC;AAEvD,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,OAAO,gBAAgB;IAC5B;QACC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACvD,CAAC;QAED,SAAS,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;YACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;SAC3C,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CACrB,MAAc,EACd,KAAa,EACb,SAAiB,EACjB,QAAgB,EAChB,IAAwB,EACxB,OAAuB;QAEvB,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtF,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,IAAI,SAAS;YAAE,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC;QAC7C,IAAI,QAAQ;YAAE,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC3C,IAAI,OAAO;YAAE,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;QAE3C,MAAM,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,YAAY;YAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;SACzE,CAAC,CAAC;QAEH,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAQ,CAAC;YACzF,MAAM,cAAc,GAAG,IAAI,GAAG,CAC7B,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;iBACnB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;iBACzC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC,CACnC,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE;oBAClE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC,CAAC;iBAClE,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"mailchimp.js","sourceRoot":"","sources":["../../src/helpers/mailchimp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,SAAS,MAAM,gCAAgC,CAAC;AAEvD,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,OAAO,gBAAgB;IAC5B;QACC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACvD,CAAC;QAED,SAAS,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;YACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;SAC3C,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CACrB,MAAc,EACd,KAAa,EACb,SAAiB,EACjB,QAAgB,EAChB,IAAwB,EACxB,OAAuB;QAEvB,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtF,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,IAAI,SAAS;YAAE,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC;QAC7C,IAAI,QAAQ;YAAE,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC3C,IAAI,OAAO;YAAE,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;QAE3C,MAAM,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE;YAC3D,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,YAAY;YAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;SACzE,CAAC,CAAC;QAEH,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAQ,CAAC;YACzF,MAAM,cAAc,GAAG,IAAI,GAAG,CAC7B,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC,CACjG,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE;oBAClE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC,CAAC;iBAClE,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"credential-status-auth.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/auth/routes/api/credential-status-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,qBAAa,gCAAiC,SAAQ,gBAAgB;;CAiCrE"}
1
+ {"version":3,"file":"credential-status-auth.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/auth/routes/api/credential-status-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,qBAAa,gCAAiC,SAAQ,gBAAgB;;CAoCrE"}
@@ -12,6 +12,8 @@ export class CredentialStatusAuthRuleProvider extends AuthRuleProvider {
12
12
  this.registerRule('/credential-status/update/encrypted', 'POST', 'update-encrypted:credential-status:mainnet');
13
13
  this.registerRule('/credential-status/update/unencrypted', 'POST', 'update-unencrypted:credential-status:testnet');
14
14
  this.registerRule('/credential-status/update/unencrypted', 'POST', 'update-unencrypted:credential-status:mainnet');
15
+ this.registerRule('/credential-status/list', 'GET', 'list:credential-status:testnet', { skipNamespace: true });
16
+ this.registerRule('/credential-status/list', 'GET', 'list:credential-status:mainnet', { skipNamespace: true });
15
17
  // Unauthorized routes
16
18
  this.registerRule('/credential-status/search', 'GET', '', { allowUnauthorized: true, skipNamespace: true });
17
19
  this.registerRule('/credential-status/check', 'POST', 'check:credential-status', { skipNamespace: true });
@@ -1 +1 @@
1
- {"version":3,"file":"credential-status-auth.js","sourceRoot":"","sources":["../../../../../src/middleware/auth/routes/api/credential-status-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,OAAO,gCAAiC,SAAQ,gBAAgB;IACrE;QACC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,CAAC,qCAAqC,EAAE,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAC/G,IAAI,CAAC,YAAY,CAAC,qCAAqC,EAAE,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAC/G,IAAI,CAAC,YAAY,CAChB,uCAAuC,EACvC,MAAM,EACN,8CAA8C,CAC9C,CAAC;QACF,IAAI,CAAC,YAAY,CAChB,uCAAuC,EACvC,MAAM,EACN,8CAA8C,CAC9C,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,MAAM,EAAE,mCAAmC,CAAC,CAAC;QAC7F,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,MAAM,EAAE,mCAAmC,CAAC,CAAC;QAC7F,IAAI,CAAC,YAAY,CAAC,qCAAqC,EAAE,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAC/G,IAAI,CAAC,YAAY,CAAC,qCAAqC,EAAE,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAC/G,IAAI,CAAC,YAAY,CAChB,uCAAuC,EACvC,MAAM,EACN,8CAA8C,CAC9C,CAAC;QACF,IAAI,CAAC,YAAY,CAChB,uCAAuC,EACvC,MAAM,EACN,8CAA8C,CAC9C,CAAC;QACF,sBAAsB;QACtB,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5G,IAAI,CAAC,YAAY,CAAC,0BAA0B,EAAE,MAAM,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3G,CAAC;CACD"}
1
+ {"version":3,"file":"credential-status-auth.js","sourceRoot":"","sources":["../../../../../src/middleware/auth/routes/api/credential-status-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,OAAO,gCAAiC,SAAQ,gBAAgB;IACrE;QACC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,CAAC,qCAAqC,EAAE,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAC/G,IAAI,CAAC,YAAY,CAAC,qCAAqC,EAAE,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAC/G,IAAI,CAAC,YAAY,CAChB,uCAAuC,EACvC,MAAM,EACN,8CAA8C,CAC9C,CAAC;QACF,IAAI,CAAC,YAAY,CAChB,uCAAuC,EACvC,MAAM,EACN,8CAA8C,CAC9C,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,MAAM,EAAE,mCAAmC,CAAC,CAAC;QAC7F,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,MAAM,EAAE,mCAAmC,CAAC,CAAC;QAC7F,IAAI,CAAC,YAAY,CAAC,qCAAqC,EAAE,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAC/G,IAAI,CAAC,YAAY,CAAC,qCAAqC,EAAE,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAC/G,IAAI,CAAC,YAAY,CAChB,uCAAuC,EACvC,MAAM,EACN,8CAA8C,CAC9C,CAAC;QACF,IAAI,CAAC,YAAY,CAChB,uCAAuC,EACvC,MAAM,EACN,8CAA8C,CAC9C,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/G,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/G,sBAAsB;QACtB,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5G,IAAI,CAAC,YAAY,CAAC,0BAA0B,EAAE,MAAM,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3G,CAAC;CACD"}