@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.
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +3 -0
- package/dist/app.js.map +1 -1
- package/dist/controllers/api/accreditation.d.ts.map +1 -1
- package/dist/controllers/api/accreditation.js +36 -9
- package/dist/controllers/api/accreditation.js.map +1 -1
- package/dist/controllers/api/credential-status.d.ts +94 -0
- package/dist/controllers/api/credential-status.d.ts.map +1 -1
- package/dist/controllers/api/credential-status.js +220 -506
- package/dist/controllers/api/credential-status.js.map +1 -1
- package/dist/controllers/api/credential.d.ts +66 -0
- package/dist/controllers/api/credential.d.ts.map +1 -1
- package/dist/controllers/api/credential.js +117 -1
- package/dist/controllers/api/credential.js.map +1 -1
- package/dist/controllers/api/did.js.map +1 -1
- package/dist/controllers/api/key.js.map +1 -1
- package/dist/controllers/api/presentation.js +22 -21
- package/dist/controllers/api/presentation.js.map +1 -1
- package/dist/controllers/api/providers.controller.js.map +1 -1
- package/dist/controllers/api/resource.js.map +1 -1
- package/dist/database/entities/issued-credential.entity.d.ts +10 -1
- package/dist/database/entities/issued-credential.entity.d.ts.map +1 -1
- package/dist/database/entities/issued-credential.entity.js +22 -0
- package/dist/database/entities/issued-credential.entity.js.map +1 -1
- package/dist/database/entities/status-registry.entity.d.ts +60 -0
- package/dist/database/entities/status-registry.entity.d.ts.map +1 -0
- package/dist/database/entities/status-registry.entity.js +145 -0
- package/dist/database/entities/status-registry.entity.js.map +1 -0
- package/dist/database/migrations/1761834657128-studio-migrations.d.ts +7 -0
- package/dist/database/migrations/1761834657128-studio-migrations.d.ts.map +1 -0
- package/dist/database/migrations/1761834657128-studio-migrations.js +14 -0
- package/dist/database/migrations/1761834657128-studio-migrations.js.map +1 -0
- package/dist/database/migrations/1762775396083-MigrateStatusLists.d.ts +25 -0
- package/dist/database/migrations/1762775396083-MigrateStatusLists.d.ts.map +1 -0
- package/dist/database/migrations/1762775396083-MigrateStatusLists.js +243 -0
- package/dist/database/migrations/1762775396083-MigrateStatusLists.js.map +1 -0
- package/dist/database/migrations/1762775500000-UpdateWriteCursors.d.ts +23 -0
- package/dist/database/migrations/1762775500000-UpdateWriteCursors.d.ts.map +1 -0
- package/dist/database/migrations/1762775500000-UpdateWriteCursors.js +181 -0
- package/dist/database/migrations/1762775500000-UpdateWriteCursors.js.map +1 -0
- package/dist/database/types/types.d.ts.map +1 -1
- package/dist/database/types/types.js +10 -0
- package/dist/database/types/types.js.map +1 -1
- package/dist/helpers/mailchimp.d.ts.map +1 -1
- package/dist/helpers/mailchimp.js +1 -3
- package/dist/helpers/mailchimp.js.map +1 -1
- package/dist/middleware/auth/routes/api/credential-status-auth.d.ts.map +1 -1
- package/dist/middleware/auth/routes/api/credential-status-auth.js +2 -0
- package/dist/middleware/auth/routes/api/credential-status-auth.js.map +1 -1
- package/dist/services/api/credential-status.d.ts +107 -0
- package/dist/services/api/credential-status.d.ts.map +1 -0
- package/dist/services/api/credential-status.js +923 -0
- package/dist/services/api/credential-status.js.map +1 -0
- package/dist/services/api/credentials.d.ts +12 -0
- package/dist/services/api/credentials.d.ts.map +1 -1
- package/dist/services/api/credentials.js +330 -117
- package/dist/services/api/credentials.js.map +1 -1
- package/dist/services/connectors/resource.js.map +1 -1
- package/dist/services/identity/abstract.d.ts +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/services/identity/index.d.ts.map +1 -1
- package/dist/services/identity/providers/studio/agent.d.ts +6 -6
- package/dist/services/identity/providers/studio/agent.d.ts.map +1 -1
- package/dist/services/identity/providers/studio/agent.js +11 -2
- package/dist/services/identity/providers/studio/agent.js.map +1 -1
- package/dist/services/identity/providers/studio/local.d.ts +3 -3
- package/dist/services/identity/providers/studio/postgres.d.ts +3 -3
- package/dist/services/identity/providers/studio/postgres.d.ts.map +1 -1
- package/dist/services/identity/providers/studio/postgres.js +0 -12
- package/dist/services/identity/providers/studio/postgres.js.map +1 -1
- package/dist/services/track/api/credential-status-subscriber.d.ts +4 -4
- package/dist/services/track/api/credential-status-subscriber.d.ts.map +1 -1
- package/dist/services/track/api/credential-status-subscriber.js +18 -1
- package/dist/services/track/api/credential-status-subscriber.js.map +1 -1
- package/dist/services/track/api/credential-subscriber.d.ts +4 -4
- package/dist/services/track/api/credential-subscriber.d.ts.map +1 -1
- package/dist/services/track/api/credential-subscriber.js.map +1 -1
- package/dist/services/track/api/did-subscriber.d.ts +4 -4
- package/dist/services/track/api/did-subscriber.d.ts.map +1 -1
- package/dist/services/track/api/did-subscriber.js.map +1 -1
- package/dist/services/track/api/key-subscriber.d.ts +4 -4
- package/dist/services/track/api/key-subscriber.d.ts.map +1 -1
- package/dist/services/track/api/key-subscriber.js.map +1 -1
- package/dist/services/track/api/presentation-subscriber.d.ts +4 -4
- package/dist/services/track/api/presentation-subscriber.d.ts.map +1 -1
- package/dist/services/track/api/presentation-subscriber.js.map +1 -1
- package/dist/services/track/api/resource-subscriber.d.ts +4 -4
- package/dist/services/track/api/resource-subscriber.d.ts.map +1 -1
- package/dist/services/track/api/resource-subscriber.js.map +1 -1
- package/dist/services/track/base.d.ts +2 -2
- package/dist/services/track/base.d.ts.map +1 -1
- package/dist/services/track/base.js.map +1 -1
- package/dist/services/track/operation-subscriber.d.ts +4 -4
- package/dist/services/track/operation-subscriber.d.ts.map +1 -1
- package/dist/services/track/operation-subscriber.js.map +1 -1
- package/dist/services/track/tracker.d.ts +2 -2
- package/dist/services/track/tracker.d.ts.map +1 -1
- package/dist/services/track/tracker.js.map +1 -1
- package/dist/services/track/types.d.ts +2 -2
- package/dist/services/track/types.d.ts.map +1 -1
- package/dist/static/swagger-api.json +560 -46
- package/dist/types/accreditation.d.ts +3 -0
- package/dist/types/accreditation.d.ts.map +1 -1
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/constants.js +2 -0
- package/dist/types/constants.js.map +1 -1
- package/dist/types/credential-status.d.ts +39 -1
- package/dist/types/credential-status.d.ts.map +1 -1
- package/dist/types/credential-status.js +7 -0
- package/dist/types/credential-status.js.map +1 -1
- package/dist/types/credential.d.ts +21 -3
- package/dist/types/credential.d.ts.map +1 -1
- package/dist/types/credential.js +5 -0
- package/dist/types/credential.js.map +1 -1
- package/dist/types/swagger-api-types.d.ts +242 -39
- package/dist/types/swagger-api-types.d.ts.map +1 -1
- package/dist/types/swagger-api-types.js +242 -39
- package/dist/types/swagger-api-types.js.map +1 -1
- package/dist/types/track.d.ts +8 -6
- package/dist/types/track.d.ts.map +1 -1
- package/dist/types/track.js.map +1 -1
- 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;
|
|
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":"AAAA,OAAO,GAAG,MAAM,sBAAsB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;
|
|
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;
|
|
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
|
|
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;;
|
|
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"}
|