@verana-labs/vs-agent-nestjs-client 2.0.0-dev.8 → 2.0.0-dev.81
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/README.md +61 -201
- package/build/app.module.js +26 -34
- package/build/app.module.js.map +1 -1
- package/build/connections/connection.entity.d.ts +4 -5
- package/build/connections/connection.entity.js +2 -10
- package/build/connections/connection.entity.js.map +1 -1
- package/build/connections/connection.repository.d.ts +6 -20
- package/build/connections/connection.repository.js +12 -40
- package/build/connections/connection.repository.js.map +1 -1
- package/build/connections/connection.service.d.ts +8 -17
- package/build/connections/connection.service.js +33 -54
- package/build/connections/connection.service.js.map +1 -1
- package/build/connections/index.d.ts +0 -2
- package/build/connections/index.js +0 -2
- package/build/connections/index.js.map +1 -1
- package/build/credentials/credential.entity.d.ts +1 -1
- package/build/credentials/credential.entity.js +1 -1
- package/build/credentials/credential.entity.js.map +1 -1
- package/build/credentials/credential.service.d.ts +22 -90
- package/build/credentials/credential.service.js +109 -204
- package/build/credentials/credential.service.js.map +1 -1
- package/build/credentials/index.d.ts +0 -1
- package/build/credentials/index.js +0 -1
- package/build/credentials/index.js.map +1 -1
- package/build/events.controller.d.ts +9 -0
- package/build/events.controller.js +47 -0
- package/build/events.controller.js.map +1 -0
- package/build/events.service.d.ts +12 -0
- package/build/events.service.js +80 -0
- package/build/events.service.js.map +1 -0
- package/build/index.d.ts +4 -3
- package/build/index.js +4 -3
- package/build/index.js.map +1 -1
- package/build/interfaces.d.ts +2 -28
- package/build/jms/index.d.ts +1 -1
- package/build/jms/index.js +4 -1
- package/build/jms/index.js.map +1 -1
- package/build/jms/stats-producer.service.d.ts +3 -4
- package/build/jms/stats-producer.service.js +3 -4
- package/build/jms/stats-producer.service.js.map +1 -1
- package/build/tokens.d.ts +3 -0
- package/build/tokens.js +7 -0
- package/build/tokens.js.map +1 -0
- package/build/types.d.ts +25 -53
- package/build/types.js +7 -1
- package/build/types.js.map +1 -1
- package/package.json +3 -9
- package/build/connections/connection.controller.d.ts +0 -10
- package/build/connections/connection.controller.js +0 -65
- package/build/connections/connection.controller.js.map +0 -1
- package/build/connections/connection.module.d.ts +0 -5
- package/build/connections/connection.module.js +0 -44
- package/build/connections/connection.module.js.map +0 -1
- package/build/credentials/credential.module.d.ts +0 -5
- package/build/credentials/credential.module.js +0 -34
- package/build/credentials/credential.module.js.map +0 -1
- package/build/jms/stats.module.d.ts +0 -5
- package/build/jms/stats.module.js +0 -34
- package/build/jms/stats.module.js.map +0 -1
- package/build/messages/index.d.ts +0 -3
- package/build/messages/index.js +0 -20
- package/build/messages/index.js.map +0 -1
- package/build/messages/message.controller.d.ts +0 -13
- package/build/messages/message.controller.js +0 -95
- package/build/messages/message.controller.js.map +0 -1
- package/build/messages/message.module.d.ts +0 -5
- package/build/messages/message.module.js +0 -41
- package/build/messages/message.module.js.map +0 -1
- package/build/messages/message.service.d.ts +0 -19
- package/build/messages/message.service.js +0 -104
- package/build/messages/message.service.js.map +0 -1
|
@@ -14,269 +14,173 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
var CredentialService_1;
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.CredentialService = void 0;
|
|
17
|
-
const
|
|
17
|
+
const crypto_1 = require("crypto");
|
|
18
18
|
const common_1 = require("@nestjs/common");
|
|
19
19
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
20
20
|
const vs_agent_client_1 = require("@verana-labs/vs-agent-client");
|
|
21
|
-
const vs_agent_model_1 = require("@verana-labs/vs-agent-model");
|
|
22
21
|
const typeorm_2 = require("typeorm");
|
|
22
|
+
const tokens_1 = require("../tokens");
|
|
23
23
|
const types_1 = require("../types");
|
|
24
24
|
const credential_entity_1 = require("./credential.entity");
|
|
25
25
|
const revocation_registry_entity_1 = require("./revocation-registry.entity");
|
|
26
26
|
let CredentialService = CredentialService_1 = class CredentialService {
|
|
27
|
-
constructor(credentialRepository, revocationRepository,
|
|
28
|
-
var _a;
|
|
27
|
+
constructor(credentialRepository, revocationRepository, client) {
|
|
29
28
|
this.credentialRepository = credentialRepository;
|
|
30
29
|
this.revocationRepository = revocationRepository;
|
|
31
|
-
this.
|
|
30
|
+
this.client = client;
|
|
32
31
|
this.logger = new common_1.Logger(CredentialService_1.name);
|
|
33
|
-
if (!options.url)
|
|
34
|
-
throw new Error(`For this module to be used the value url must be added`);
|
|
35
|
-
this.url = options.url;
|
|
36
|
-
this.apiVersion = (_a = options.version) !== null && _a !== void 0 ? _a : vs_agent_client_1.ApiVersion.V1;
|
|
37
|
-
this.apiClient = new vs_agent_client_1.ApiClient(this.url, this.apiVersion);
|
|
38
|
-
this.logger.debug(`Initialized with url: ${this.url}, version: ${this.apiVersion}`);
|
|
39
32
|
}
|
|
40
|
-
|
|
41
|
-
* Creates and initializes a credential type (credential definition) with optional revocation registry support.
|
|
42
|
-
*
|
|
43
|
-
* This method specifically handles the creation of credential types/definitions, which serve as templates
|
|
44
|
-
* for issuing actual credentials.
|
|
45
|
-
*
|
|
46
|
-
* When revocation support is enabled:
|
|
47
|
-
* - Two default revocation registries will be created
|
|
48
|
-
* - This ensures continuity if one registry reaches capacity
|
|
49
|
-
*
|
|
50
|
-
* @param attributes - List of attributes that credentials of this type will support
|
|
51
|
-
* @param options.name - Name identifier for the credential type
|
|
52
|
-
* @param options.version - Version of the credential type
|
|
53
|
-
* @param options.supportRevocation - Whether credentials can be revoked
|
|
54
|
-
* @param options.maximumCredentialNumber - Maximum number of credentials that can be issued
|
|
55
|
-
*
|
|
56
|
-
* @returns Promise<void> - Resolves when the credential type and revocation registries are created
|
|
57
|
-
*/
|
|
58
|
-
async createType(name, version, attributes, options = {}) {
|
|
33
|
+
async createCredentialDefinition(relatedJsonSchemaCredentialId, options = {}) {
|
|
59
34
|
const { supportRevocation, maximumCredentialNumber } = options;
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
if (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
// Both records are created to handle multiple credentials
|
|
72
|
-
await this.createRevocationRegistry(credentialType.id, maximumCredentialNumber);
|
|
73
|
-
await this.createRevocationRegistry(credentialType.id, maximumCredentialNumber);
|
|
74
|
-
}
|
|
35
|
+
const definitions = await this.listCredentialDefinitions();
|
|
36
|
+
const existing = definitions.find(definition => definition.relatedJsonSchemaCredentialId === relatedJsonSchemaCredentialId);
|
|
37
|
+
if (existing)
|
|
38
|
+
return existing;
|
|
39
|
+
const definition = await this.client.anoncreds.createCredentialDefinition({
|
|
40
|
+
relatedJsonSchemaCredentialId,
|
|
41
|
+
supportRevocation,
|
|
42
|
+
});
|
|
43
|
+
if (supportRevocation) {
|
|
44
|
+
await this.createRevocationRegistry(definition.id, maximumCredentialNumber);
|
|
45
|
+
await this.createRevocationRegistry(definition.id, maximumCredentialNumber);
|
|
75
46
|
}
|
|
47
|
+
return definition;
|
|
76
48
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
* Each claim has a `name` (key) and a `value` (data). Example:
|
|
87
|
-
* ```javascript
|
|
88
|
-
* const claims = [
|
|
89
|
-
* { name: "email", value: "john.doe@example.com" },
|
|
90
|
-
* { name: "name", value: "John Doe" }
|
|
91
|
-
* ];
|
|
92
|
-
* ```
|
|
93
|
-
*
|
|
94
|
-
* @param {object} [options] - Additional options for credential issuance.
|
|
95
|
-
*
|
|
96
|
-
* ### Options
|
|
97
|
-
* - `refId` (optional, `string`): A unique identifier for the credential. If provided:
|
|
98
|
-
* - When `revokeIfAlreadyIssued` is set to `true`, any existing credential with the same `refId`
|
|
99
|
-
* will be revoked, ensuring the credential is unique.
|
|
100
|
-
* - If `revokeIfAlreadyIssued` is set to `false` (default), multiple credentials with the same `refId` can exist
|
|
101
|
-
* - Used for managing unique credentials like official documents.
|
|
102
|
-
* - Hashed in the database for security.
|
|
103
|
-
* - `credentialDefinitionId` (optional, `string`): Specifies the ID of the credential definition to use.
|
|
104
|
-
* - If not provided, the first available credential definition is used.
|
|
105
|
-
* - `revokeIfAlreadyIssued` (optional, `boolean`): Whether automatic revocation is enabled (default false)
|
|
106
|
-
*
|
|
107
|
-
* @returns {Promise<void>} A promise that resolves when the credential issuance is successfully sent.
|
|
108
|
-
* If an error occurs during the process, the promise will be rejected with the relevant error message.
|
|
109
|
-
*
|
|
110
|
-
*/
|
|
111
|
-
async issue(connectionId, claims, options) {
|
|
112
|
-
var _a, _b, _c, _d, _e, _f;
|
|
113
|
-
const { revokeIfAlreadyIssued = false, jsonSchemaCredentialId } = options !== null && options !== void 0 ? options : {};
|
|
114
|
-
const refIdHash = (options === null || options === void 0 ? void 0 : options.refId) ? this.hash(options.refId) : null;
|
|
115
|
-
if (jsonSchemaCredentialId) {
|
|
116
|
-
await this.apiClient.trustCredentials.issuance({
|
|
117
|
-
format: 'anoncreds',
|
|
118
|
-
jsonSchemaCredentialId,
|
|
119
|
-
claims,
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
// Select the appropriate credential type based on definition or schema
|
|
123
|
-
const credentialTypes = await this.apiClient.credentialTypes.getAll();
|
|
124
|
-
const credentialType = (_a = credentialTypes.find(type => (options === null || options === void 0 ? void 0 : options.credentialDefinitionId)
|
|
125
|
-
? type.id === options.credentialDefinitionId
|
|
126
|
-
: type.relatedJsonSchemaCredentialId === jsonSchemaCredentialId)) !== null && _a !== void 0 ? _a : credentialTypes[0];
|
|
127
|
-
if (!credentialType) {
|
|
49
|
+
async issue(claims, options = {}) {
|
|
50
|
+
var _a, _b;
|
|
51
|
+
const { connectionId, revokeIfAlreadyIssued = false, jsonSchemaCredentialId } = options;
|
|
52
|
+
const refIdHash = options.refId ? this.hash(options.refId) : null;
|
|
53
|
+
const definitions = await this.listCredentialDefinitions();
|
|
54
|
+
const definition = (_a = definitions.find(candidate => options.credentialDefinitionId
|
|
55
|
+
? candidate.id === options.credentialDefinitionId
|
|
56
|
+
: candidate.relatedJsonSchemaCredentialId === jsonSchemaCredentialId)) !== null && _a !== void 0 ? _a : definitions[0];
|
|
57
|
+
if (!definition) {
|
|
128
58
|
throw new Error('No credential definitions found. Please configure a credential using the create method before proceeding.');
|
|
129
59
|
}
|
|
130
|
-
const { id: credentialDefinitionId,
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
for (const cred of creds)
|
|
137
|
-
await this.
|
|
138
|
-
}
|
|
60
|
+
const { id: credentialDefinitionId, supportRevocation } = definition;
|
|
61
|
+
if (revokeIfAlreadyIssued) {
|
|
62
|
+
const creds = await this.credentialRepository.find({
|
|
63
|
+
where: Object.assign({ status: types_1.CredentialStatus.ACCEPTED }, (refIdHash ? { refIdHash } : {})),
|
|
64
|
+
relations: ['revocationRegistry'],
|
|
65
|
+
});
|
|
66
|
+
for (const cred of creds)
|
|
67
|
+
await this.revokeCredential(cred);
|
|
139
68
|
}
|
|
140
|
-
// Begin a transaction to save new credentials and handle revocation logic if supported
|
|
141
69
|
const cred = await this.credentialRepository.manager.transaction(async (transaction) => {
|
|
142
|
-
if (!
|
|
70
|
+
if (!supportRevocation) {
|
|
143
71
|
return await transaction.save(credential_entity_1.CredentialEntity, Object.assign({ connectionId }, (refIdHash ? { refIdHash } : {})));
|
|
144
72
|
}
|
|
145
|
-
|
|
146
|
-
let lastCred = await transaction
|
|
73
|
+
let registry = await transaction
|
|
147
74
|
.createQueryBuilder(revocation_registry_entity_1.RevocationRegistryEntity, 'registry')
|
|
148
75
|
.where('registry.currentIndex != registry.maximumCredentialNumber')
|
|
149
76
|
.andWhere('registry.credentialDefinitionId = :credentialDefinitionId', { credentialDefinitionId })
|
|
150
77
|
.orderBy('registry.currentIndex', 'DESC')
|
|
151
|
-
.setLock('pessimistic_write')
|
|
78
|
+
.setLock('pessimistic_write')
|
|
152
79
|
.getOne();
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
await transaction.save(
|
|
157
|
-
return await transaction.save(credential_entity_1.CredentialEntity, Object.assign({ connectionId, revocationRegistryIndex: lastCred.currentIndex, revocationRegistry: lastCred }, (refIdHash ? { refIdHash } : {})));
|
|
80
|
+
if (!registry)
|
|
81
|
+
registry = await this.createRevocationRegistry(credentialDefinitionId);
|
|
82
|
+
await transaction.save(revocation_registry_entity_1.RevocationRegistryEntity, registry);
|
|
83
|
+
return await transaction.save(credential_entity_1.CredentialEntity, Object.assign({ connectionId, revocationRegistryIndex: registry.currentIndex, revocationRegistry: registry }, (refIdHash ? { refIdHash } : {})));
|
|
158
84
|
});
|
|
159
|
-
//
|
|
160
|
-
|
|
85
|
+
// With a connection the offer goes out on it, and the holder sees it in that
|
|
86
|
+
// conversation. Without one the agent answers an invitation, and the caller
|
|
87
|
+
// shows its `shortUrl`.
|
|
88
|
+
const offer = await this.client.didcomm.createCredentialOffer({
|
|
89
|
+
credentialDefinitionId,
|
|
90
|
+
claims: Object.entries(claims).map(([name, value]) => ({ name, value: String(value) })),
|
|
161
91
|
connectionId,
|
|
162
92
|
revocationRegistryDefinitionId: (_b = cred.revocationRegistry) === null || _b === void 0 ? void 0 : _b.revocationDefinitionId,
|
|
163
|
-
revocationRegistryIndex:
|
|
164
|
-
|
|
93
|
+
revocationRegistryIndex: cred.revocationRegistryIndex,
|
|
94
|
+
autoAccept: true,
|
|
165
95
|
});
|
|
166
|
-
|
|
167
|
-
payload.jsonSchemaCredentialId = jsonSchemaCredentialId;
|
|
168
|
-
else {
|
|
169
|
-
payload.credentialDefinitionId = credentialDefinitionId;
|
|
170
|
-
}
|
|
171
|
-
const thread = await this.apiClient.messages.send(payload);
|
|
172
|
-
cred.threadId = thread.id;
|
|
96
|
+
cred.credentialExchangeId = offer.credentialExchangeId;
|
|
173
97
|
cred.status = types_1.CredentialStatus.OFFERED;
|
|
174
98
|
await this.credentialRepository.save(cred);
|
|
175
99
|
if (cred.revocationRegistry) {
|
|
176
100
|
cred.revocationRegistry.currentIndex += 1;
|
|
177
|
-
this.revocationRepository.save(cred.revocationRegistry);
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
this.logger.log(`Revocation registry successfully created with ID ${revRegistry}`);
|
|
101
|
+
await this.revocationRepository.save(cred.revocationRegistry);
|
|
102
|
+
if (cred.revocationRegistry.currentIndex === cred.revocationRegistry.maximumCredentialNumber) {
|
|
103
|
+
const next = await this.createRevocationRegistry(credentialDefinitionId, cred.revocationRegistry.maximumCredentialNumber);
|
|
104
|
+
this.logger.log(`Revocation registry successfully created with ID ${next.revocationDefinitionId}`);
|
|
182
105
|
}
|
|
183
106
|
}
|
|
184
|
-
|
|
107
|
+
return offer;
|
|
185
108
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
* @param connectionId - The connection ID associated with the credential.
|
|
189
|
-
* @param threadId - The thread ID to link with the credential.
|
|
190
|
-
* @throws Error if no credential is found with the specified connection ID.
|
|
191
|
-
*/
|
|
192
|
-
async handleAcceptance(threadId) {
|
|
193
|
-
const cred = await this.credentialRepository.findOne({
|
|
194
|
-
where: {
|
|
195
|
-
threadId,
|
|
196
|
-
status: types_1.CredentialStatus.OFFERED,
|
|
197
|
-
},
|
|
198
|
-
order: { createdTs: 'DESC' },
|
|
199
|
-
});
|
|
200
|
-
if (!cred)
|
|
201
|
-
throw new Error(`Credential not found with threadId: ${threadId}`);
|
|
109
|
+
async handleAcceptance(credentialExchangeId) {
|
|
110
|
+
const cred = await this.findOffered(credentialExchangeId);
|
|
202
111
|
cred.status = types_1.CredentialStatus.ACCEPTED;
|
|
203
112
|
await this.credentialRepository.save(cred);
|
|
204
113
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
* @param connectionId - The connection ID associated with the credential.
|
|
208
|
-
* @param threadId - The thread ID to link with the credential.
|
|
209
|
-
* @throws Error if no credential is found with the specified connection ID.
|
|
210
|
-
*/
|
|
211
|
-
async handleRejection(threadId) {
|
|
212
|
-
const cred = await this.credentialRepository.findOne({
|
|
213
|
-
where: {
|
|
214
|
-
threadId,
|
|
215
|
-
status: types_1.CredentialStatus.OFFERED,
|
|
216
|
-
},
|
|
217
|
-
order: { createdTs: 'DESC' },
|
|
218
|
-
});
|
|
219
|
-
if (!cred)
|
|
220
|
-
throw new Error(`Credential with threadId ${threadId} not found.`);
|
|
114
|
+
async handleRejection(credentialExchangeId) {
|
|
115
|
+
const cred = await this.findOffered(credentialExchangeId);
|
|
221
116
|
cred.status = types_1.CredentialStatus.REJECTED;
|
|
222
117
|
await this.credentialRepository.save(cred);
|
|
223
118
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
async revoke(connectionId, threadId) {
|
|
231
|
-
var _a, _b;
|
|
232
|
-
// Define search options based on whether a thread ID is provided
|
|
233
|
-
const options = threadId
|
|
234
|
-
? { where: { threadId, status: types_1.CredentialStatus.ACCEPTED } }
|
|
119
|
+
async revoke(connectionId, credentialExchangeId) {
|
|
120
|
+
const options = credentialExchangeId
|
|
121
|
+
? {
|
|
122
|
+
where: { credentialExchangeId, status: types_1.CredentialStatus.ACCEPTED },
|
|
123
|
+
relations: ['revocationRegistry'],
|
|
124
|
+
}
|
|
235
125
|
: {
|
|
236
|
-
where: { connectionId, status: types_1.CredentialStatus.ACCEPTED,
|
|
126
|
+
where: { connectionId, status: types_1.CredentialStatus.ACCEPTED, credentialExchangeId: (0, typeorm_2.Not)((0, typeorm_2.IsNull)()) },
|
|
237
127
|
order: { createdTs: 'DESC' },
|
|
128
|
+
relations: ['revocationRegistry'],
|
|
238
129
|
};
|
|
239
130
|
const cred = await this.credentialRepository.findOne(options);
|
|
240
|
-
if (!cred)
|
|
241
|
-
throw new Error(`Credential not found with
|
|
242
|
-
|
|
131
|
+
if (!cred) {
|
|
132
|
+
throw new Error(`Credential not found with credentialExchangeId "${credentialExchangeId}" or connectionId "${connectionId}".`);
|
|
133
|
+
}
|
|
134
|
+
await this.revokeCredential(cred);
|
|
135
|
+
}
|
|
136
|
+
async revokeCredential(cred) {
|
|
137
|
+
if (cred.revocationRegistry && cred.revocationRegistryIndex != null) {
|
|
138
|
+
await this.client.anoncreds.revokeCredential({
|
|
139
|
+
revocationRegistryDefinitionId: cred.revocationRegistry.revocationDefinitionId,
|
|
140
|
+
revocationRegistryIndex: cred.revocationRegistryIndex,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
this.logger.warn(`Credential ${cred.id} has no revocation registry, marking it revoked locally only`);
|
|
145
|
+
}
|
|
243
146
|
cred.status = types_1.CredentialStatus.REVOKED;
|
|
244
147
|
await this.credentialRepository.save(cred);
|
|
245
|
-
const credentialTypes = await this.apiClient.credentialTypes.getAll();
|
|
246
|
-
const credentialType = (_a = credentialTypes.find(credType => { var _a; return credType.id === ((_a = cred.revocationRegistry) === null || _a === void 0 ? void 0 : _a.credentialDefinitionId); })) !== null && _a !== void 0 ? _a : credentialTypes[0];
|
|
247
|
-
// If revocation is not supported for this credential type, return
|
|
248
|
-
if (!credentialType.revocationSupported) {
|
|
249
|
-
this.logger.warn(`Credential definition ${(_b = cred.revocationRegistry) === null || _b === void 0 ? void 0 : _b.credentialDefinitionId} does not support revocation.`);
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
// Send a revocation message using the API client
|
|
253
|
-
await this.apiClient.messages.send(new vs_agent_model_1.CredentialRevocationMessage({
|
|
254
|
-
connectionId,
|
|
255
|
-
threadId: cred === null || cred === void 0 ? void 0 : cred.threadId,
|
|
256
|
-
}));
|
|
257
148
|
this.logger.log(`Credential revoked: ${cred.id}`);
|
|
258
149
|
}
|
|
259
|
-
|
|
260
|
-
|
|
150
|
+
async findOffered(credentialExchangeId) {
|
|
151
|
+
const cred = await this.credentialRepository.findOne({
|
|
152
|
+
where: { credentialExchangeId, status: types_1.CredentialStatus.OFFERED },
|
|
153
|
+
order: { createdTs: 'DESC' },
|
|
154
|
+
});
|
|
155
|
+
if (!cred)
|
|
156
|
+
throw new Error(`Credential not found with credentialExchangeId: ${credentialExchangeId}`);
|
|
157
|
+
return cred;
|
|
158
|
+
}
|
|
159
|
+
async listCredentialDefinitions() {
|
|
160
|
+
var _a;
|
|
161
|
+
const definitions = [];
|
|
162
|
+
let cursor;
|
|
163
|
+
do {
|
|
164
|
+
const page = await this.client.anoncreds.listCredentialDefinitions({ cursor });
|
|
165
|
+
definitions.push(...page.items);
|
|
166
|
+
cursor = (_a = page.nextCursor) !== null && _a !== void 0 ? _a : undefined;
|
|
167
|
+
} while (cursor);
|
|
168
|
+
return definitions;
|
|
169
|
+
}
|
|
261
170
|
async createRevocationRegistry(credentialDefinitionId, maximumCredentialNumber = 1000) {
|
|
262
|
-
const
|
|
171
|
+
const { revocationRegistryDefinitionId } = await this.client.anoncreds.createRevocationRegistry({
|
|
263
172
|
credentialDefinitionId,
|
|
264
173
|
maximumCredentialNumber,
|
|
265
174
|
});
|
|
266
|
-
|
|
267
|
-
if (!revocationDefinitionId)
|
|
268
|
-
throw new Error(`Unable to create a new revocation registry for CredentialDefinitionId: ${credentialDefinitionId}`);
|
|
269
|
-
const revocationRegistry = await this.revocationRepository.save({
|
|
175
|
+
return await this.revocationRepository.save({
|
|
270
176
|
credentialDefinitionId,
|
|
271
|
-
revocationDefinitionId,
|
|
177
|
+
revocationDefinitionId: revocationRegistryDefinitionId,
|
|
272
178
|
currentIndex: 0,
|
|
273
179
|
maximumCredentialNumber,
|
|
274
180
|
});
|
|
275
|
-
return revocationRegistry;
|
|
276
181
|
}
|
|
277
182
|
hash(value) {
|
|
278
|
-
|
|
279
|
-
return Buffer.from(new core_1.Sha256().hash(bytes)).toString('hex');
|
|
183
|
+
return (0, crypto_1.createHash)('sha256').update(value).digest('hex');
|
|
280
184
|
}
|
|
281
185
|
};
|
|
282
186
|
exports.CredentialService = CredentialService;
|
|
@@ -284,8 +188,9 @@ exports.CredentialService = CredentialService = CredentialService_1 = __decorate
|
|
|
284
188
|
(0, common_1.Injectable)(),
|
|
285
189
|
__param(0, (0, typeorm_1.InjectRepository)(credential_entity_1.CredentialEntity)),
|
|
286
190
|
__param(1, (0, typeorm_1.InjectRepository)(revocation_registry_entity_1.RevocationRegistryEntity)),
|
|
287
|
-
__param(2, (0, common_1.Inject)(
|
|
191
|
+
__param(2, (0, common_1.Inject)(tokens_1.VS_AGENT_CLIENT)),
|
|
288
192
|
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
289
|
-
typeorm_2.Repository,
|
|
193
|
+
typeorm_2.Repository,
|
|
194
|
+
vs_agent_client_1.ApiClient])
|
|
290
195
|
], CredentialService);
|
|
291
196
|
//# sourceMappingURL=credential.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential.service.js","sourceRoot":"","sources":["../../src/credentials/credential.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"credential.service.js","sourceRoot":"","sources":["../../src/credentials/credential.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./credential.entity"), exports);
|
|
18
18
|
__exportStar(require("./credential.service"), exports);
|
|
19
|
-
__exportStar(require("./credential.module"), exports);
|
|
20
19
|
__exportStar(require("./revocation-registry.entity"), exports);
|
|
21
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,uDAAoC;AACpC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,uDAAoC;AACpC,+DAA4C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { EventEnvelope, UnknownEventEnvelope } from '@verana-labs/vs-agent-client';
|
|
2
|
+
import { EventsService } from './events.service';
|
|
3
|
+
import { EventsModuleOptions } from './types';
|
|
4
|
+
export declare class EventsController {
|
|
5
|
+
private readonly options;
|
|
6
|
+
private readonly events;
|
|
7
|
+
constructor(options: EventsModuleOptions, events: EventsService);
|
|
8
|
+
receive(envelope: EventEnvelope | UnknownEventEnvelope, authorization?: string): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.EventsController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const events_service_1 = require("./events.service");
|
|
18
|
+
const tokens_1 = require("./tokens");
|
|
19
|
+
let EventsController = class EventsController {
|
|
20
|
+
constructor(options, events) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.events = events;
|
|
23
|
+
}
|
|
24
|
+
async receive(envelope, authorization) {
|
|
25
|
+
const { webhookApiKey } = this.options;
|
|
26
|
+
if (webhookApiKey && authorization !== `Bearer ${webhookApiKey}`)
|
|
27
|
+
throw new common_1.UnauthorizedException();
|
|
28
|
+
await this.events.receive(envelope);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.EventsController = EventsController;
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, common_1.Post)('events'),
|
|
34
|
+
(0, common_1.HttpCode)(204),
|
|
35
|
+
__param(0, (0, common_1.Body)()),
|
|
36
|
+
__param(1, (0, common_1.Headers)('authorization')),
|
|
37
|
+
__metadata("design:type", Function),
|
|
38
|
+
__metadata("design:paramtypes", [Object, String]),
|
|
39
|
+
__metadata("design:returntype", Promise)
|
|
40
|
+
], EventsController.prototype, "receive", null);
|
|
41
|
+
exports.EventsController = EventsController = __decorate([
|
|
42
|
+
(0, common_1.Controller)(),
|
|
43
|
+
__param(0, (0, common_1.Inject)(tokens_1.EVENTS_MODULE_OPTIONS)),
|
|
44
|
+
__param(1, (0, common_1.Inject)(events_service_1.EventsService)),
|
|
45
|
+
__metadata("design:paramtypes", [Object, events_service_1.EventsService])
|
|
46
|
+
], EventsController);
|
|
47
|
+
//# sourceMappingURL=events.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.controller.js","sourceRoot":"","sources":["../src/events.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAyG;AAGzG,qDAAgD;AAChD,qCAAgD;AAIzC,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YACkD,OAA4B,EACpC,MAAqB;QADb,YAAO,GAAP,OAAO,CAAqB;QACpC,WAAM,GAAN,MAAM,CAAe;IAC5D,CAAC;IAIS,AAAN,KAAK,CAAC,OAAO,CACV,QAA8C,EAC5B,aAAsB;QAEhD,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QACtC,IAAI,aAAa,IAAI,aAAa,KAAK,UAAU,aAAa,EAAE;YAAE,MAAM,IAAI,8BAAqB,EAAE,CAAA;QACnG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACrC,CAAC;CACF,CAAA;AAhBY,4CAAgB;AAQd;IAFZ,IAAA,aAAI,EAAC,QAAQ,CAAC;IACd,IAAA,iBAAQ,EAAC,GAAG,CAAC;IAEX,WAAA,IAAA,aAAI,GAAE,CAAA;IACN,WAAA,IAAA,gBAAO,EAAC,eAAe,CAAC,CAAA;;;;+CAK1B;2BAfU,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,8BAAqB,CAAC,CAAA;IAC7B,WAAA,IAAA,eAAM,EAAC,8BAAa,CAAC,CAAA;6CAA0B,8BAAa;GAHpD,gBAAgB,CAgB5B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EventEnvelope, UnknownEventEnvelope } from '@verana-labs/vs-agent-client';
|
|
2
|
+
import { ConnectionsService } from './connections';
|
|
3
|
+
import { CredentialService } from './credentials';
|
|
4
|
+
import { EventHandler } from './interfaces';
|
|
5
|
+
export declare class EventsService {
|
|
6
|
+
private readonly eventHandler;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
private readonly dispatcher;
|
|
9
|
+
private readonly seen;
|
|
10
|
+
constructor(eventHandler: EventHandler, connections?: ConnectionsService, credentials?: CredentialService);
|
|
11
|
+
receive(envelope: EventEnvelope | UnknownEventEnvelope): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var EventsService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.EventsService = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const vs_agent_client_1 = require("@verana-labs/vs-agent-client");
|
|
19
|
+
const connections_1 = require("./connections");
|
|
20
|
+
const credentials_1 = require("./credentials");
|
|
21
|
+
const tokens_1 = require("./tokens");
|
|
22
|
+
const SEEN_LIMIT = 4096;
|
|
23
|
+
let EventsService = EventsService_1 = class EventsService {
|
|
24
|
+
constructor(eventHandler, connections, credentials) {
|
|
25
|
+
this.eventHandler = eventHandler;
|
|
26
|
+
this.logger = new common_1.Logger(EventsService_1.name);
|
|
27
|
+
this.dispatcher = new vs_agent_client_1.EventDispatcher();
|
|
28
|
+
this.seen = new Set();
|
|
29
|
+
if (connections) {
|
|
30
|
+
this.dispatcher
|
|
31
|
+
.on('didcomm.connections.state-updated', (data, envelope) => connections.handleStateUpdated(data, envelope.timestamp))
|
|
32
|
+
.on('didcomm.user-profile.profile-received', data => connections.handleProfileReceived(data));
|
|
33
|
+
}
|
|
34
|
+
if (credentials) {
|
|
35
|
+
this.dispatcher.on('didcomm.credential-exchanges.state-updated', async (data) => {
|
|
36
|
+
if (data.role !== 'issuer')
|
|
37
|
+
return;
|
|
38
|
+
if (data.state === 'done')
|
|
39
|
+
await credentials.handleAcceptance(data.credentialExchangeId);
|
|
40
|
+
else if (data.state === 'declined' || data.state === 'abandoned') {
|
|
41
|
+
await credentials.handleRejection(data.credentialExchangeId);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async receive(envelope) {
|
|
47
|
+
if (this.seen.has(envelope.id))
|
|
48
|
+
return;
|
|
49
|
+
this.seen.add(envelope.id);
|
|
50
|
+
if (this.seen.size > SEEN_LIMIT) {
|
|
51
|
+
const [oldest] = this.seen;
|
|
52
|
+
this.seen.delete(oldest);
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
await this.dispatcher.dispatch(envelope);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
this.logger.error(`Internal handler failed for event ${envelope.type} (${envelope.id}): ${error}`);
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
await this.eventHandler.onEvent(envelope);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
this.seen.delete(envelope.id);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
exports.EventsService = EventsService;
|
|
70
|
+
exports.EventsService = EventsService = EventsService_1 = __decorate([
|
|
71
|
+
(0, common_1.Injectable)(),
|
|
72
|
+
__param(0, (0, common_1.Inject)(tokens_1.EVENT_HANDLER)),
|
|
73
|
+
__param(1, (0, common_1.Optional)()),
|
|
74
|
+
__param(1, (0, common_1.Inject)(connections_1.ConnectionsService)),
|
|
75
|
+
__param(2, (0, common_1.Optional)()),
|
|
76
|
+
__param(2, (0, common_1.Inject)(credentials_1.CredentialService)),
|
|
77
|
+
__metadata("design:paramtypes", [Object, connections_1.ConnectionsService,
|
|
78
|
+
credentials_1.CredentialService])
|
|
79
|
+
], EventsService);
|
|
80
|
+
//# sourceMappingURL=events.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.service.js","sourceRoot":"","sources":["../src/events.service.ts"],"names":[],"mappings":"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"}
|