@cheqd/studio 3.13.1-develop.1 → 3.14.0-develop.1
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 -1
- package/dist/app.js.map +1 -1
- package/dist/controllers/api/account.d.ts +2 -2
- package/dist/controllers/api/account.js +2 -2
- package/dist/controllers/api/accreditation.d.ts.map +1 -1
- package/dist/controllers/api/accreditation.js +1 -0
- package/dist/controllers/api/accreditation.js.map +1 -1
- package/dist/controllers/api/credential.d.ts +104 -16
- package/dist/controllers/api/credential.d.ts.map +1 -1
- package/dist/controllers/api/credential.js +137 -97
- package/dist/controllers/api/credential.js.map +1 -1
- package/dist/controllers/validator/credential-status.d.ts +1 -1
- package/dist/controllers/validator/credential-status.d.ts.map +1 -1
- package/dist/controllers/validator/validator.d.ts +2 -1
- package/dist/controllers/validator/validator.d.ts.map +1 -1
- package/dist/database/entities/issued-credential.entity.d.ts +42 -0
- package/dist/database/entities/issued-credential.entity.d.ts.map +1 -0
- package/dist/database/entities/issued-credential.entity.js +131 -0
- package/dist/database/entities/issued-credential.entity.js.map +1 -0
- package/dist/database/migrations/1760533089289-studio-migrations.d.ts +7 -0
- package/dist/database/migrations/1760533089289-studio-migrations.d.ts.map +1 -0
- package/dist/database/migrations/1760533089289-studio-migrations.js +35 -0
- package/dist/database/migrations/1760533089289-studio-migrations.js.map +1 -0
- package/dist/database/migrations/1760533089389-MigrateStudioCredentials.d.ts +20 -0
- package/dist/database/migrations/1760533089389-MigrateStudioCredentials.d.ts.map +1 -0
- package/dist/database/migrations/1760533089389-MigrateStudioCredentials.js +202 -0
- package/dist/database/migrations/1760533089389-MigrateStudioCredentials.js.map +1 -0
- package/dist/database/migrations/1760533089589-MigrateDockCredentials.d.ts +24 -0
- package/dist/database/migrations/1760533089589-MigrateDockCredentials.d.ts.map +1 -0
- package/dist/database/migrations/1760533089589-MigrateDockCredentials.js +205 -0
- package/dist/database/migrations/1760533089589-MigrateDockCredentials.js.map +1 -0
- package/dist/database/types/types.d.ts.map +1 -1
- package/dist/database/types/types.js +11 -0
- package/dist/database/types/types.js.map +1 -1
- package/dist/middleware/auth/routes/api/credential-auth.d.ts.map +1 -1
- package/dist/middleware/auth/routes/api/credential-auth.js +5 -0
- package/dist/middleware/auth/routes/api/credential-auth.js.map +1 -1
- package/dist/services/api/credentials.d.ts +36 -1
- package/dist/services/api/credentials.d.ts.map +1 -1
- package/dist/services/api/credentials.js +332 -7
- package/dist/services/api/credentials.js.map +1 -1
- package/dist/services/connectors/resource.d.ts +6 -1
- package/dist/services/connectors/resource.d.ts.map +1 -1
- package/dist/services/connectors/resource.js +7 -0
- package/dist/services/connectors/resource.js.map +1 -1
- package/dist/services/identity/abstract.d.ts +3 -1
- package/dist/services/identity/abstract.d.ts.map +1 -1
- package/dist/services/identity/abstract.js +6 -0
- package/dist/services/identity/abstract.js.map +1 -1
- package/dist/services/identity/index.d.ts +3 -1
- package/dist/services/identity/index.d.ts.map +1 -1
- package/dist/services/identity/index.js.map +1 -1
- package/dist/services/identity/providers/dock/identity.d.ts +1 -0
- package/dist/services/identity/providers/dock/identity.d.ts.map +1 -1
- package/dist/services/identity/providers/dock/identity.js +51 -15
- package/dist/services/identity/providers/dock/identity.js.map +1 -1
- package/dist/services/identity/providers/studio/postgres.d.ts +1 -0
- package/dist/services/identity/providers/studio/postgres.d.ts.map +1 -1
- package/dist/services/identity/providers/studio/postgres.js +38 -2
- package/dist/services/identity/providers/studio/postgres.js.map +1 -1
- package/dist/static/swagger-api.json +364 -47
- package/dist/types/credential-status.d.ts +7 -0
- package/dist/types/credential-status.d.ts.map +1 -1
- package/dist/types/credential.d.ts +47 -1
- package/dist/types/credential.d.ts.map +1 -1
- package/dist/types/swagger-api-types.d.ts +143 -20
- package/dist/types/swagger-api-types.d.ts.map +1 -1
- package/dist/types/swagger-api-types.js +143 -20
- package/dist/types/swagger-api-types.js.map +1 -1
- package/dist/types/validation.d.ts +0 -6
- package/dist/types/validation.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
/**
|
|
3
|
+
* Migrates existing Studio (Veramo) credentials from ResourceEntity to IssuedCredentialEntity
|
|
4
|
+
* This migration:
|
|
5
|
+
* 1. Finds all ResourceEntity records with resourceType='VerifiableCredential', 'VerifiableAccreditationToAccredit', or 'VerifiableAccreditationToAttest'
|
|
6
|
+
* 2. Resolves credential data from DID URLs via resolver
|
|
7
|
+
* 3. Creates corresponding IssuedCredentialEntity records with providerId='studio'
|
|
8
|
+
*/
|
|
9
|
+
export declare class MigrateStudioCredentials1760533089389 implements MigrationInterface {
|
|
10
|
+
private readonly JWT_PROOF_TYPE;
|
|
11
|
+
private readonly RESOLVER_URL;
|
|
12
|
+
private readonly BATCH_SIZE;
|
|
13
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
14
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve credential from DID URL using the resolver
|
|
17
|
+
*/
|
|
18
|
+
private resolveCredential;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=1760533089389-MigrateStudioCredentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1760533089389-MigrateStudioCredentials.d.ts","sourceRoot":"","sources":["../../../src/database/migrations/1760533089389-MigrateStudioCredentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM1D;;;;;;GAMG;AACH,qBAAa,qCAAsC,YAAW,kBAAkB;IAC/E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4D;IACzF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IAEpB,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmK3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB1D;;OAEG;YACW,iBAAiB;CA2B/B"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { ResourceEntity } from '../entities/resource.entity.js';
|
|
2
|
+
import { IssuedCredentialEntity } from '../entities/issued-credential.entity.js';
|
|
3
|
+
import { CredentialProviderEntity } from '../entities/credential-provider.entity.js';
|
|
4
|
+
/**
|
|
5
|
+
* Migrates existing Studio (Veramo) credentials from ResourceEntity to IssuedCredentialEntity
|
|
6
|
+
* This migration:
|
|
7
|
+
* 1. Finds all ResourceEntity records with resourceType='VerifiableCredential', 'VerifiableAccreditationToAccredit', or 'VerifiableAccreditationToAttest'
|
|
8
|
+
* 2. Resolves credential data from DID URLs via resolver
|
|
9
|
+
* 3. Creates corresponding IssuedCredentialEntity records with providerId='studio'
|
|
10
|
+
*/
|
|
11
|
+
export class MigrateStudioCredentials1760533089389 {
|
|
12
|
+
JWT_PROOF_TYPE = 'JwtProof2020';
|
|
13
|
+
RESOLVER_URL = process.env.RESOLVER_URL || 'https://resolver.cheqd.net';
|
|
14
|
+
BATCH_SIZE = 50; // Process credentials in batches to avoid memory issues
|
|
15
|
+
async up(queryRunner) {
|
|
16
|
+
console.log('Starting Studio credentials migration...');
|
|
17
|
+
// Get Studio provider
|
|
18
|
+
const studioProvider = await queryRunner.manager.findOne(CredentialProviderEntity, {
|
|
19
|
+
where: { providerId: 'studio' },
|
|
20
|
+
});
|
|
21
|
+
if (!studioProvider) {
|
|
22
|
+
console.log('Studio provider not found, skipping credential migration');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
console.log(`Found Studio provider: ${studioProvider.providerId}`);
|
|
26
|
+
// Find all credential resources
|
|
27
|
+
const credentialResources = await queryRunner.manager.find(ResourceEntity, {
|
|
28
|
+
where: [
|
|
29
|
+
{ resourceType: 'VerifiableCredential' },
|
|
30
|
+
{ resourceType: 'VerifiableAccreditationToAccredit' },
|
|
31
|
+
{ resourceType: 'VerifiableAccreditationToAttest' },
|
|
32
|
+
{ resourceType: 'VerifiableAuthorizationForTrustChain' },
|
|
33
|
+
],
|
|
34
|
+
relations: ['identifier', 'customer'],
|
|
35
|
+
});
|
|
36
|
+
console.log(`Found ${credentialResources.length} credential resources to migrate`);
|
|
37
|
+
if (credentialResources.length === 0) {
|
|
38
|
+
console.log('No credentials to migrate');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
let successCount = 0;
|
|
42
|
+
let skippedCount = 0;
|
|
43
|
+
let errorCount = 0;
|
|
44
|
+
const errors = [];
|
|
45
|
+
// Process credentials in batches
|
|
46
|
+
for (let i = 0; i < credentialResources.length; i += this.BATCH_SIZE) {
|
|
47
|
+
const batch = credentialResources.slice(i, i + this.BATCH_SIZE);
|
|
48
|
+
for (const resource of batch) {
|
|
49
|
+
try {
|
|
50
|
+
// Check if already migrated
|
|
51
|
+
const existing = await queryRunner.manager.findOne(IssuedCredentialEntity, {
|
|
52
|
+
where: {
|
|
53
|
+
providerId: studioProvider.providerId,
|
|
54
|
+
providerCredentialId: resource.resourceId,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
if (existing) {
|
|
58
|
+
skippedCount++;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Resolve credential from DID URL
|
|
62
|
+
const didUrl = `${resource.identifier.did}/resources/${resource.resourceId}`;
|
|
63
|
+
const credential = await this.resolveCredential(didUrl);
|
|
64
|
+
if (!credential) {
|
|
65
|
+
throw new Error(`Failed to resolve credential from ${didUrl}`);
|
|
66
|
+
}
|
|
67
|
+
// Determine format based on proof type
|
|
68
|
+
let format = 'jsonld';
|
|
69
|
+
if (credential.proof) {
|
|
70
|
+
if (typeof credential.proof === 'object' && 'type' in credential.proof) {
|
|
71
|
+
format = credential.proof.type === this.JWT_PROOF_TYPE ? 'jwt' : 'jsonld';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
let category = 'credential';
|
|
75
|
+
if (resource.resourceType === 'VerifiableAccreditationToAccredit' ||
|
|
76
|
+
resource.resourceType === 'VerifiableAccreditationToAttest' ||
|
|
77
|
+
resource.resourceType === 'VerifiableAuthorizationForTrustChain') {
|
|
78
|
+
category = 'accreditation';
|
|
79
|
+
}
|
|
80
|
+
// Extract credential type
|
|
81
|
+
const type = Array.isArray(credential.type)
|
|
82
|
+
? credential.type
|
|
83
|
+
: typeof credential.type === 'string'
|
|
84
|
+
? [credential.type]
|
|
85
|
+
: ['VerifiableCredential'];
|
|
86
|
+
// Extract issuer DID
|
|
87
|
+
const issuerId = typeof credential.issuer === 'string' ? credential.issuer : credential.issuer?.id;
|
|
88
|
+
// Extract subject DID
|
|
89
|
+
const subjectId = credential.credentialSubject?.id;
|
|
90
|
+
// Parse dates
|
|
91
|
+
const issuedAt = credential.issuanceDate ? new Date(credential.issuanceDate) : resource.createdAt;
|
|
92
|
+
const expiresAt = credential.expirationDate ? new Date(credential.expirationDate) : undefined;
|
|
93
|
+
// Create IssuedCredentialEntity
|
|
94
|
+
const issuedCredential = queryRunner.manager.create(IssuedCredentialEntity, {
|
|
95
|
+
providerId: studioProvider.providerId,
|
|
96
|
+
format: format,
|
|
97
|
+
category: category,
|
|
98
|
+
type: type,
|
|
99
|
+
issuedAt: issuedAt,
|
|
100
|
+
customer: resource.customer,
|
|
101
|
+
providerCredentialId: resource.resourceId,
|
|
102
|
+
issuerId: issuerId,
|
|
103
|
+
subjectId: subjectId,
|
|
104
|
+
status: 'issued',
|
|
105
|
+
credentialStatus: credential.credentialStatus,
|
|
106
|
+
expiresAt: expiresAt,
|
|
107
|
+
metadata: {
|
|
108
|
+
migratedFrom: 'ResourceEntity',
|
|
109
|
+
schema: credential.credentialSchema,
|
|
110
|
+
proof: credential.proof,
|
|
111
|
+
resourceType: resource.resourceType,
|
|
112
|
+
didUrl: didUrl,
|
|
113
|
+
encrypted: resource.encrypted,
|
|
114
|
+
termsOfUse: credential.termsOfUse,
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
await queryRunner.manager.save(IssuedCredentialEntity, issuedCredential);
|
|
118
|
+
successCount++;
|
|
119
|
+
if (successCount % 10 === 0) {
|
|
120
|
+
console.log(` Migrated ${successCount} credentials so far...`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
errorCount++;
|
|
125
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
126
|
+
errors.push({
|
|
127
|
+
resourceId: resource.resourceId,
|
|
128
|
+
error: errorMessage,
|
|
129
|
+
});
|
|
130
|
+
console.error(` Error migrating credential ${resource.resourceId}:`, errorMessage);
|
|
131
|
+
// Continue with next credential
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Small delay between batches
|
|
135
|
+
if (i + this.BATCH_SIZE < credentialResources.length) {
|
|
136
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
console.log(`\nMigration completed:`);
|
|
140
|
+
console.log(` Successfully migrated: ${successCount}`);
|
|
141
|
+
console.log(` Skipped (already migrated): ${skippedCount}`);
|
|
142
|
+
console.log(` Errors: ${errorCount}\n`);
|
|
143
|
+
console.log(` Total processed: ${successCount + skippedCount + errorCount}/${credentialResources.length}`);
|
|
144
|
+
if (errors.length > 0) {
|
|
145
|
+
console.log(`\nErrors encountered (first 10):`);
|
|
146
|
+
errors.slice(0, 10).forEach(({ resourceId, error }) => {
|
|
147
|
+
console.log(` - ${resourceId}: ${error}`);
|
|
148
|
+
});
|
|
149
|
+
if (errors.length > 10) {
|
|
150
|
+
console.log(` ... and ${errors.length - 10} more errors`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async down(queryRunner) {
|
|
155
|
+
console.log('Rolling back Studio credentials migration...');
|
|
156
|
+
// Get Studio provider
|
|
157
|
+
const studioProvider = await queryRunner.manager.findOne(CredentialProviderEntity, {
|
|
158
|
+
where: { providerId: 'studio' },
|
|
159
|
+
});
|
|
160
|
+
if (!studioProvider) {
|
|
161
|
+
console.log('Studio provider not found, nothing to rollback');
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// Delete all IssuedCredentialEntity records that were migrated from ResourceEntity
|
|
165
|
+
const result = await queryRunner.manager
|
|
166
|
+
.createQueryBuilder()
|
|
167
|
+
.delete()
|
|
168
|
+
.from(IssuedCredentialEntity)
|
|
169
|
+
.where('providerId = :providerId', { providerId: studioProvider.providerId })
|
|
170
|
+
.andWhere("metadata->>'migratedFrom' = :migratedFrom", { migratedFrom: 'ResourceEntity' })
|
|
171
|
+
.execute();
|
|
172
|
+
console.log(`Rolled back ${result.affected} migrated credentials`);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Resolve credential from DID URL using the resolver
|
|
176
|
+
*/
|
|
177
|
+
async resolveCredential(didUrl) {
|
|
178
|
+
try {
|
|
179
|
+
const response = await fetch(`${this.RESOLVER_URL}/${didUrl}`, {
|
|
180
|
+
headers: {
|
|
181
|
+
'Content-Type': '*/*',
|
|
182
|
+
Accept: 'application/json',
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
if (!response.ok) {
|
|
186
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
187
|
+
}
|
|
188
|
+
const data = await response.json();
|
|
189
|
+
// Validate that we received a credential
|
|
190
|
+
if (!data || typeof data !== 'object') {
|
|
191
|
+
throw new Error('Invalid response from resolver');
|
|
192
|
+
}
|
|
193
|
+
return data;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
197
|
+
console.error(` Failed to resolve ${didUrl}: ${errorMessage}`);
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=1760533089389-MigrateStudioCredentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1760533089389-MigrateStudioCredentials.js","sourceRoot":"","sources":["../../../src/database/migrations/1760533089389-MigrateStudioCredentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
/**
|
|
3
|
+
* Migrates existing Dock credentials from Dock API to IssuedCredentialEntity
|
|
4
|
+
* This migration:
|
|
5
|
+
* 1. Finds all customers with active Dock provider configuration
|
|
6
|
+
* 2. Fetches credentials from Dock API for each customer
|
|
7
|
+
* 3. Creates corresponding IssuedCredentialEntity records
|
|
8
|
+
*/
|
|
9
|
+
export declare class MigrateDockCredentials1760533089589 implements MigrationInterface {
|
|
10
|
+
private readonly DOCK_API_URL;
|
|
11
|
+
private secretBox;
|
|
12
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
13
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Fetch credentials from Dock API for a customer
|
|
16
|
+
*/
|
|
17
|
+
private fetchDockCredentials;
|
|
18
|
+
/**
|
|
19
|
+
* Decrypt API key manually to avoid circular dependency with ProviderService
|
|
20
|
+
* This replicates the decryption logic from ProviderService
|
|
21
|
+
*/
|
|
22
|
+
private decryptApiKey;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=1760533089589-MigrateDockCredentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1760533089589-MigrateDockCredentials.d.ts","sourceRoot":"","sources":["../../../src/database/migrations/1760533089589-MigrateDockCredentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAO1D;;;;;;GAMG;AACH,qBAAa,mCAAoC,YAAW,kBAAkB;IAC7E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IACjE,OAAO,CAAC,SAAS,CAAa;IAEjB,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAuK3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB1D;;OAEG;YACW,oBAAoB;IA4BlC;;;OAGG;YACW,aAAa;CAG3B"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { IssuedCredentialEntity } from '../entities/issued-credential.entity.js';
|
|
2
|
+
import { CredentialProviderEntity } from '../entities/credential-provider.entity.js';
|
|
3
|
+
import { ProviderConfigurationEntity } from '../entities/provider-configuration.entity.js';
|
|
4
|
+
import { SecretBox } from '@veramo/kms-local';
|
|
5
|
+
/**
|
|
6
|
+
* Migrates existing Dock credentials from Dock API to IssuedCredentialEntity
|
|
7
|
+
* This migration:
|
|
8
|
+
* 1. Finds all customers with active Dock provider configuration
|
|
9
|
+
* 2. Fetches credentials from Dock API for each customer
|
|
10
|
+
* 3. Creates corresponding IssuedCredentialEntity records
|
|
11
|
+
*/
|
|
12
|
+
export class MigrateDockCredentials1760533089589 {
|
|
13
|
+
DOCK_API_URL = 'https://api-testnet.truvera.io';
|
|
14
|
+
secretBox;
|
|
15
|
+
async up(queryRunner) {
|
|
16
|
+
console.log('Starting Dock credentials migration...');
|
|
17
|
+
this.secretBox = new SecretBox(process.env.EXTERNAL_DB_ENCRYPTION_KEY);
|
|
18
|
+
// Get Dock provider
|
|
19
|
+
const dockProvider = await queryRunner.manager.findOne(CredentialProviderEntity, {
|
|
20
|
+
where: { providerId: 'dock' },
|
|
21
|
+
});
|
|
22
|
+
if (!dockProvider) {
|
|
23
|
+
console.log('Dock provider not found, skipping credential migration');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
console.log(`Found Dock provider: ${dockProvider.providerId}`);
|
|
27
|
+
// Find all customers with Dock provider configuration
|
|
28
|
+
const dockConfigurations = await queryRunner.manager.find(ProviderConfigurationEntity, {
|
|
29
|
+
where: { providerId: dockProvider.providerId, active: true },
|
|
30
|
+
relations: ['customer'],
|
|
31
|
+
});
|
|
32
|
+
console.log(`Found ${dockConfigurations.length} customers with active Dock configuration`);
|
|
33
|
+
if (dockConfigurations.length === 0) {
|
|
34
|
+
console.log('No active Dock configurations to migrate');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
let totalSuccess = 0;
|
|
38
|
+
let totalSkipped = 0;
|
|
39
|
+
let totalErrors = 0;
|
|
40
|
+
const customerErrors = [];
|
|
41
|
+
// Process each customer's credentials
|
|
42
|
+
for (const config of dockConfigurations) {
|
|
43
|
+
try {
|
|
44
|
+
console.log(`\nProcessing customer: ${config.customer.customerId}...`);
|
|
45
|
+
// Decrypt API key manually to avoid circular dependency
|
|
46
|
+
const apiKey = await this.decryptApiKey(config.encryptedApiKey);
|
|
47
|
+
if (!apiKey) {
|
|
48
|
+
throw new Error('Failed to decrypt API key');
|
|
49
|
+
}
|
|
50
|
+
// Fetch credentials from Dock API
|
|
51
|
+
const credentials = await this.fetchDockCredentials(apiKey);
|
|
52
|
+
console.log(` Found ${credentials.length} credentials for customer ${config.customer.customerId}`);
|
|
53
|
+
let successCount = 0;
|
|
54
|
+
let skippedCount = 0;
|
|
55
|
+
let errorCount = 0;
|
|
56
|
+
for (const credential of credentials) {
|
|
57
|
+
try {
|
|
58
|
+
// Check if already migrated using Dock's credential ID
|
|
59
|
+
const existing = await queryRunner.manager.findOne(IssuedCredentialEntity, {
|
|
60
|
+
where: {
|
|
61
|
+
providerId: dockProvider.providerId,
|
|
62
|
+
providerCredentialId: credential.id,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
if (existing) {
|
|
66
|
+
skippedCount++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
// Determine status
|
|
70
|
+
const status = credential.revoked ? 'revoked' : 'issued';
|
|
71
|
+
// Parse dates
|
|
72
|
+
const issuedAt = new Date(credential.createdAt);
|
|
73
|
+
const expiresAt = credential.expirationDate ? new Date(credential.expirationDate) : undefined;
|
|
74
|
+
// Handle credential type - default to 'VerifiableCredential' if empty
|
|
75
|
+
const credentialType = credential.type && credential.type.trim() !== '' ? credential.type : 'VerifiableCredential';
|
|
76
|
+
let category = 'credential';
|
|
77
|
+
if (credentialType.includes('Accreditation') || credentialType.includes('accreditation')) {
|
|
78
|
+
category = 'accreditation';
|
|
79
|
+
}
|
|
80
|
+
// Create IssuedCredentialEntity (using object initialization to avoid constructor issues)
|
|
81
|
+
const issuedCredential = queryRunner.manager.create(IssuedCredentialEntity, {
|
|
82
|
+
providerId: dockProvider.providerId,
|
|
83
|
+
format: 'jsonld', // Dock credentials are JSON-LD format
|
|
84
|
+
category: category,
|
|
85
|
+
type: [credentialType],
|
|
86
|
+
issuedAt: issuedAt,
|
|
87
|
+
customer: config.customer,
|
|
88
|
+
providerCredentialId: credential.id,
|
|
89
|
+
issuerId: credential.issuerKey.split('#')[0], // Extract DID from key reference
|
|
90
|
+
subjectId: credential.subjectRef,
|
|
91
|
+
status: status,
|
|
92
|
+
statusUpdatedAt: credential.revoked ? issuedAt : undefined,
|
|
93
|
+
credentialStatus: credential.revocationRegistry
|
|
94
|
+
? {
|
|
95
|
+
id: credential.revocationRegistry,
|
|
96
|
+
index: credential.index,
|
|
97
|
+
}
|
|
98
|
+
: undefined,
|
|
99
|
+
expiresAt: expiresAt,
|
|
100
|
+
metadata: {
|
|
101
|
+
migratedFrom: 'DockAPI',
|
|
102
|
+
dockCredentialId: credential.id,
|
|
103
|
+
issuerKey: credential.issuerKey,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
await queryRunner.manager.save(IssuedCredentialEntity, issuedCredential);
|
|
107
|
+
successCount++;
|
|
108
|
+
if (successCount % 10 === 0) {
|
|
109
|
+
console.log(` Migrated ${successCount} credentials so far...`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
errorCount++;
|
|
114
|
+
console.error(` Error migrating credential ${credential.id}:`, error instanceof Error ? error.message : String(error));
|
|
115
|
+
// Continue with next credential
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
console.log(` Customer ${config.customer.customerId} completed:`);
|
|
119
|
+
console.log(` Successfully migrated: ${successCount}`);
|
|
120
|
+
console.log(` Skipped (already migrated): ${skippedCount}`);
|
|
121
|
+
console.log(` Errors: ${errorCount}`);
|
|
122
|
+
totalSuccess += successCount;
|
|
123
|
+
totalSkipped += skippedCount;
|
|
124
|
+
totalErrors += errorCount;
|
|
125
|
+
// Small delay between customers to avoid rate limiting
|
|
126
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
130
|
+
customerErrors.push({
|
|
131
|
+
customerId: config.customer.customerId,
|
|
132
|
+
error: errorMessage,
|
|
133
|
+
});
|
|
134
|
+
console.error(` Error processing customer ${config.customer.customerId}:`, errorMessage);
|
|
135
|
+
// Continue with next customer
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
console.log(`\nMigration completed:`);
|
|
139
|
+
console.log(` Total successfully migrated: ${totalSuccess}`);
|
|
140
|
+
console.log(` Total skipped (already migrated): ${totalSkipped}`);
|
|
141
|
+
console.log(` Total errors: ${totalErrors}`);
|
|
142
|
+
console.log(` Customers processed: ${dockConfigurations.length - customerErrors.length}/${dockConfigurations.length}`);
|
|
143
|
+
if (customerErrors.length > 0) {
|
|
144
|
+
console.log(`\nCustomer errors:`);
|
|
145
|
+
customerErrors.forEach(({ customerId, error }) => {
|
|
146
|
+
console.log(` - ${customerId}: ${error}`);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async down(queryRunner) {
|
|
151
|
+
console.log('Rolling back Dock credentials migration...');
|
|
152
|
+
// Get Dock provider
|
|
153
|
+
const dockProvider = await queryRunner.manager.findOne(CredentialProviderEntity, {
|
|
154
|
+
where: { providerId: 'dock' },
|
|
155
|
+
});
|
|
156
|
+
if (!dockProvider) {
|
|
157
|
+
console.log('Dock provider not found, nothing to rollback');
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
// Delete all IssuedCredentialEntity records that were migrated from Dock API
|
|
161
|
+
const result = await queryRunner.manager
|
|
162
|
+
.createQueryBuilder()
|
|
163
|
+
.delete()
|
|
164
|
+
.from(IssuedCredentialEntity)
|
|
165
|
+
.where('providerId = :providerId', { providerId: dockProvider.providerId })
|
|
166
|
+
.andWhere("metadata->>'migratedFrom' = :migratedFrom", { migratedFrom: 'DockAPI' })
|
|
167
|
+
.execute();
|
|
168
|
+
console.log(`Rolled back ${result.affected} migrated credentials`);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Fetch credentials from Dock API for a customer
|
|
172
|
+
*/
|
|
173
|
+
async fetchDockCredentials(apiKey) {
|
|
174
|
+
try {
|
|
175
|
+
const response = await fetch(`${this.DOCK_API_URL}/credentials`, {
|
|
176
|
+
method: 'GET',
|
|
177
|
+
headers: {
|
|
178
|
+
'Content-Type': 'application/json',
|
|
179
|
+
Authorization: `Bearer ${apiKey}`,
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
if (!response.ok) {
|
|
183
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
184
|
+
}
|
|
185
|
+
const data = (await response.json());
|
|
186
|
+
// Validate response
|
|
187
|
+
if (!Array.isArray(data)) {
|
|
188
|
+
throw new Error('Invalid response from Dock API: expected array');
|
|
189
|
+
}
|
|
190
|
+
return data;
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
194
|
+
throw new Error(`Failed to fetch credentials from Dock API: ${errorMessage}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Decrypt API key manually to avoid circular dependency with ProviderService
|
|
199
|
+
* This replicates the decryption logic from ProviderService
|
|
200
|
+
*/
|
|
201
|
+
async decryptApiKey(encryptedApiKey) {
|
|
202
|
+
return await this.secretBox.decrypt(encryptedApiKey);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=1760533089589-MigrateDockCredentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1760533089589-MigrateDockCredentials.js","sourceRoot":"","sources":["../../../src/database/migrations/1760533089589-MigrateDockCredentials.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;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"}
|
|
@@ -16,6 +16,7 @@ import { CoinEntity } from '../entities/coin.entity.js';
|
|
|
16
16
|
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
|
+
import { IssuedCredentialEntity } from '../entities/issued-credential.entity.js';
|
|
19
20
|
import { CreatePaymentTable1695740345977 } from '../migrations/archive/CreatePaymentTable.js';
|
|
20
21
|
import { CreateOperationTable1695740345977 } from '../migrations/archive/CreateOperationTable.js';
|
|
21
22
|
import { CreateCustomersTable1683723285946 } from '../migrations/archive/CreateCustomersTable.js';
|
|
@@ -44,6 +45,9 @@ import { InsertFingerprintAPIKeyTable1746780465032 } from '../migrations/archive
|
|
|
44
45
|
import { Cleanup1748331341024 } from '../migrations/custom/1748331341024-Cleanup.js';
|
|
45
46
|
import { StudioMigrations1750427001486 } from '../migrations/1750427001486-studio-migrations.js';
|
|
46
47
|
import { StudioMigrations1758011998054 } from '../migrations/1758011998054-studio-migrations.js';
|
|
48
|
+
import { StudioMigrations1760533089289 } from '../migrations/1760533089289-studio-migrations.js';
|
|
49
|
+
import { MigrateStudioCredentials1760533089389 } from '../migrations/1760533089389-MigrateStudioCredentials.js';
|
|
50
|
+
import { MigrateDockCredentials1760533089589 } from '../migrations/1760533089589-MigrateDockCredentials.js';
|
|
47
51
|
dotenv.config();
|
|
48
52
|
const { EXTERNAL_DB_CONNECTION_URL, EXTERNAL_DB_CERT } = process.env;
|
|
49
53
|
export class Memory {
|
|
@@ -122,6 +126,12 @@ export class Postgres {
|
|
|
122
126
|
Cleanup1748331341024,
|
|
123
127
|
StudioMigrations1750427001486,
|
|
124
128
|
StudioMigrations1758011998054,
|
|
129
|
+
// Add IssuedCredential table
|
|
130
|
+
StudioMigrations1760533089289,
|
|
131
|
+
// Migrate Studio credentials to IssuedCredential table
|
|
132
|
+
MigrateStudioCredentials1760533089389,
|
|
133
|
+
// Migrate Dock credentials to IssuedCredential table
|
|
134
|
+
MigrateDockCredentials1760533089589,
|
|
125
135
|
],
|
|
126
136
|
entities: [
|
|
127
137
|
...Entities,
|
|
@@ -139,6 +149,7 @@ export class Postgres {
|
|
|
139
149
|
SubscriptionEntity,
|
|
140
150
|
CredentialProviderEntity,
|
|
141
151
|
ProviderConfigurationEntity,
|
|
152
|
+
IssuedCredentialEntity,
|
|
142
153
|
],
|
|
143
154
|
logging: ['error', 'info', 'warn'],
|
|
144
155
|
});
|
|
@@ -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;
|
|
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":"credential-auth.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/auth/routes/api/credential-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,qBAAa,0BAA2B,SAAQ,gBAAgB;;
|
|
1
|
+
{"version":3,"file":"credential-auth.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/auth/routes/api/credential-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,qBAAa,0BAA2B,SAAQ,gBAAgB;;CAqB/D"}
|
|
@@ -12,6 +12,11 @@ export class CredentialAuthRuleProvider extends AuthRuleProvider {
|
|
|
12
12
|
this.registerRule('/credential/suspend', 'POST', 'suspend:credential:mainnet');
|
|
13
13
|
this.registerRule('/credential/reinstate', 'POST', 'reinstate:credential:testnet');
|
|
14
14
|
this.registerRule('/credential/reinstate', 'POST', 'reinstate:credential:mainnet');
|
|
15
|
+
// Issued Credentials Tracking API
|
|
16
|
+
this.registerRule('/credentials/issued', 'GET', 'list:credential:testnet', { skipNamespace: true });
|
|
17
|
+
this.registerRule('/credentials/issued', 'GET', 'list:credential:mainnet', { skipNamespace: true });
|
|
18
|
+
this.registerRule('/credentials/issued/:id', 'GET', 'list:credential:testnet', { skipNamespace: true });
|
|
19
|
+
this.registerRule('/credentials/issued/:id', 'GET', 'list:credential:mainnet', { skipNamespace: true });
|
|
15
20
|
// Unauthorized routes
|
|
16
21
|
this.registerRule('/credential/verify', 'POST', '', { allowUnauthorized: true, skipNamespace: true });
|
|
17
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-auth.js","sourceRoot":"","sources":["../../../../../src/middleware/auth/routes/api/credential-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IAC/D;QACC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC;QAC3E,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC;QAC3E,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,EAAE,2BAA2B,CAAC,CAAC;QAC7E,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,EAAE,2BAA2B,CAAC,CAAC;QAC7E,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAC/E,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAC/E,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,MAAM,EAAE,8BAA8B,CAAC,CAAC;QACnF,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,MAAM,EAAE,8BAA8B,CAAC,CAAC;QACnF,sBAAsB;QACtB,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACvG,CAAC;CACD"}
|
|
1
|
+
{"version":3,"file":"credential-auth.js","sourceRoot":"","sources":["../../../../../src/middleware/auth/routes/api/credential-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IAC/D;QACC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC;QAC3E,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC;QAC3E,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,EAAE,2BAA2B,CAAC,CAAC;QAC7E,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,EAAE,2BAA2B,CAAC,CAAC;QAC7E,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAC/E,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAC/E,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,MAAM,EAAE,8BAA8B,CAAC,CAAC;QACnF,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,MAAM,EAAE,8BAA8B,CAAC,CAAC;QACnF,kCAAkC;QAClC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,sBAAsB;QACtB,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACvG,CAAC;CACD"}
|
|
@@ -1,8 +1,43 @@
|
|
|
1
1
|
import type { VerifiableCredential } from '@veramo/core';
|
|
2
|
-
import { type CredentialRequest } from '../../types/credential.js';
|
|
2
|
+
import { GetIssuedCredentialOptions, IssuedCredentialCreateOptions, IssuedCredentialResponse, ListCredentialRequestOptions, type CredentialRequest } from '../../types/credential.js';
|
|
3
3
|
import type { CustomerEntity } from '../../database/entities/customer.entity.js';
|
|
4
|
+
import { IssuedCredentialEntity } from '../../database/entities/issued-credential.entity.js';
|
|
5
|
+
import { Repository } from 'typeorm';
|
|
4
6
|
export declare class Credentials {
|
|
5
7
|
static instance: Credentials;
|
|
8
|
+
repository: Repository<IssuedCredentialEntity>;
|
|
9
|
+
constructor();
|
|
6
10
|
issue_credential(request: CredentialRequest, customer: CustomerEntity): Promise<VerifiableCredential>;
|
|
11
|
+
/**
|
|
12
|
+
* List issued credentials with pagination and filtering
|
|
13
|
+
*/
|
|
14
|
+
list(customer: CustomerEntity, options?: ListCredentialRequestOptions): Promise<{
|
|
15
|
+
credentials: IssuedCredentialResponse[];
|
|
16
|
+
total: number;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Get a single issued credential by ID with optional credential payload
|
|
20
|
+
*/
|
|
21
|
+
get(id: string, customer: CustomerEntity, options?: GetIssuedCredentialOptions): Promise<IssuedCredentialResponse | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Create a new issued credential record
|
|
24
|
+
*/
|
|
25
|
+
create(customer: CustomerEntity, options: IssuedCredentialCreateOptions): Promise<IssuedCredentialEntity>;
|
|
26
|
+
/**
|
|
27
|
+
* Update credential status
|
|
28
|
+
*/
|
|
29
|
+
updateStatus(issuedCredentialId: string, status: 'issued' | 'suspended' | 'revoked', customer: CustomerEntity): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Convert entity to API response format
|
|
32
|
+
*/
|
|
33
|
+
private toResponse;
|
|
34
|
+
/**
|
|
35
|
+
* Sync credential status from provider API
|
|
36
|
+
*/
|
|
37
|
+
private syncStatusFromProvider;
|
|
38
|
+
/**
|
|
39
|
+
* Fetch full credential from provider
|
|
40
|
+
*/
|
|
41
|
+
private fetchCredentialFromProvider;
|
|
7
42
|
}
|
|
8
43
|
//# sourceMappingURL=credentials.d.ts.map
|