@verana-labs/vs-agent-nestjs-client 2.0.0-dev.70 → 2.0.0-dev.73
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 +106 -205
- 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 -10
- package/build/messages/message.controller.js +0 -65
- 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 -18
- package/build/messages/message.service.js +0 -103
- package/build/messages/message.service.js.map +0 -1
|
@@ -14,269 +14,169 @@ 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
|
-
|
|
161
|
-
|
|
85
|
+
const offer = await this.client.didcomm.createCredentialOffer({
|
|
86
|
+
credentialDefinitionId,
|
|
87
|
+
claims: Object.entries(claims).map(([name, value]) => ({ name, value: String(value) })),
|
|
162
88
|
revocationRegistryDefinitionId: (_b = cred.revocationRegistry) === null || _b === void 0 ? void 0 : _b.revocationDefinitionId,
|
|
163
|
-
revocationRegistryIndex:
|
|
164
|
-
|
|
89
|
+
revocationRegistryIndex: cred.revocationRegistryIndex,
|
|
90
|
+
autoAccept: true,
|
|
165
91
|
});
|
|
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;
|
|
92
|
+
cred.credentialExchangeId = offer.credentialExchangeId;
|
|
173
93
|
cred.status = types_1.CredentialStatus.OFFERED;
|
|
174
94
|
await this.credentialRepository.save(cred);
|
|
175
95
|
if (cred.revocationRegistry) {
|
|
176
96
|
cred.revocationRegistry.currentIndex += 1;
|
|
177
|
-
this.revocationRepository.save(cred.revocationRegistry);
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
this.logger.log(`Revocation registry successfully created with ID ${revRegistry}`);
|
|
97
|
+
await this.revocationRepository.save(cred.revocationRegistry);
|
|
98
|
+
if (cred.revocationRegistry.currentIndex === cred.revocationRegistry.maximumCredentialNumber) {
|
|
99
|
+
const next = await this.createRevocationRegistry(credentialDefinitionId, cred.revocationRegistry.maximumCredentialNumber);
|
|
100
|
+
this.logger.log(`Revocation registry successfully created with ID ${next.revocationDefinitionId}`);
|
|
182
101
|
}
|
|
183
102
|
}
|
|
184
|
-
|
|
103
|
+
return offer;
|
|
185
104
|
}
|
|
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}`);
|
|
105
|
+
async handleAcceptance(credentialExchangeId) {
|
|
106
|
+
const cred = await this.findOffered(credentialExchangeId);
|
|
202
107
|
cred.status = types_1.CredentialStatus.ACCEPTED;
|
|
203
108
|
await this.credentialRepository.save(cred);
|
|
204
109
|
}
|
|
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.`);
|
|
110
|
+
async handleRejection(credentialExchangeId) {
|
|
111
|
+
const cred = await this.findOffered(credentialExchangeId);
|
|
221
112
|
cred.status = types_1.CredentialStatus.REJECTED;
|
|
222
113
|
await this.credentialRepository.save(cred);
|
|
223
114
|
}
|
|
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 } }
|
|
115
|
+
async revoke(connectionId, credentialExchangeId) {
|
|
116
|
+
const options = credentialExchangeId
|
|
117
|
+
? {
|
|
118
|
+
where: { credentialExchangeId, status: types_1.CredentialStatus.ACCEPTED },
|
|
119
|
+
relations: ['revocationRegistry'],
|
|
120
|
+
}
|
|
235
121
|
: {
|
|
236
|
-
where: { connectionId, status: types_1.CredentialStatus.ACCEPTED,
|
|
122
|
+
where: { connectionId, status: types_1.CredentialStatus.ACCEPTED, credentialExchangeId: (0, typeorm_2.Not)((0, typeorm_2.IsNull)()) },
|
|
237
123
|
order: { createdTs: 'DESC' },
|
|
124
|
+
relations: ['revocationRegistry'],
|
|
238
125
|
};
|
|
239
126
|
const cred = await this.credentialRepository.findOne(options);
|
|
240
|
-
if (!cred)
|
|
241
|
-
throw new Error(`Credential not found with
|
|
242
|
-
|
|
127
|
+
if (!cred) {
|
|
128
|
+
throw new Error(`Credential not found with credentialExchangeId "${credentialExchangeId}" or connectionId "${connectionId}".`);
|
|
129
|
+
}
|
|
130
|
+
await this.revokeCredential(cred);
|
|
131
|
+
}
|
|
132
|
+
async revokeCredential(cred) {
|
|
133
|
+
if (cred.revocationRegistry && cred.revocationRegistryIndex != null) {
|
|
134
|
+
await this.client.anoncreds.revokeCredential({
|
|
135
|
+
revocationRegistryDefinitionId: cred.revocationRegistry.revocationDefinitionId,
|
|
136
|
+
revocationRegistryIndex: cred.revocationRegistryIndex,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
this.logger.warn(`Credential ${cred.id} has no revocation registry, marking it revoked locally only`);
|
|
141
|
+
}
|
|
243
142
|
cred.status = types_1.CredentialStatus.REVOKED;
|
|
244
143
|
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
144
|
this.logger.log(`Credential revoked: ${cred.id}`);
|
|
258
145
|
}
|
|
259
|
-
|
|
260
|
-
|
|
146
|
+
async findOffered(credentialExchangeId) {
|
|
147
|
+
const cred = await this.credentialRepository.findOne({
|
|
148
|
+
where: { credentialExchangeId, status: types_1.CredentialStatus.OFFERED },
|
|
149
|
+
order: { createdTs: 'DESC' },
|
|
150
|
+
});
|
|
151
|
+
if (!cred)
|
|
152
|
+
throw new Error(`Credential not found with credentialExchangeId: ${credentialExchangeId}`);
|
|
153
|
+
return cred;
|
|
154
|
+
}
|
|
155
|
+
async listCredentialDefinitions() {
|
|
156
|
+
var _a;
|
|
157
|
+
const definitions = [];
|
|
158
|
+
let cursor;
|
|
159
|
+
do {
|
|
160
|
+
const page = await this.client.anoncreds.listCredentialDefinitions({ cursor });
|
|
161
|
+
definitions.push(...page.items);
|
|
162
|
+
cursor = (_a = page.nextCursor) !== null && _a !== void 0 ? _a : undefined;
|
|
163
|
+
} while (cursor);
|
|
164
|
+
return definitions;
|
|
165
|
+
}
|
|
261
166
|
async createRevocationRegistry(credentialDefinitionId, maximumCredentialNumber = 1000) {
|
|
262
|
-
const
|
|
167
|
+
const { revocationRegistryDefinitionId } = await this.client.anoncreds.createRevocationRegistry({
|
|
263
168
|
credentialDefinitionId,
|
|
264
169
|
maximumCredentialNumber,
|
|
265
170
|
});
|
|
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({
|
|
171
|
+
return await this.revocationRepository.save({
|
|
270
172
|
credentialDefinitionId,
|
|
271
|
-
revocationDefinitionId,
|
|
173
|
+
revocationDefinitionId: revocationRegistryDefinitionId,
|
|
272
174
|
currentIndex: 0,
|
|
273
175
|
maximumCredentialNumber,
|
|
274
176
|
});
|
|
275
|
-
return revocationRegistry;
|
|
276
177
|
}
|
|
277
178
|
hash(value) {
|
|
278
|
-
|
|
279
|
-
return Buffer.from(new core_1.Sha256().hash(bytes)).toString('hex');
|
|
179
|
+
return (0, crypto_1.createHash)('sha256').update(value).digest('hex');
|
|
280
180
|
}
|
|
281
181
|
};
|
|
282
182
|
exports.CredentialService = CredentialService;
|
|
@@ -284,8 +184,9 @@ exports.CredentialService = CredentialService = CredentialService_1 = __decorate
|
|
|
284
184
|
(0, common_1.Injectable)(),
|
|
285
185
|
__param(0, (0, typeorm_1.InjectRepository)(credential_entity_1.CredentialEntity)),
|
|
286
186
|
__param(1, (0, typeorm_1.InjectRepository)(revocation_registry_entity_1.RevocationRegistryEntity)),
|
|
287
|
-
__param(2, (0, common_1.Inject)(
|
|
187
|
+
__param(2, (0, common_1.Inject)(tokens_1.VS_AGENT_CLIENT)),
|
|
288
188
|
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
289
|
-
typeorm_2.Repository,
|
|
189
|
+
typeorm_2.Repository,
|
|
190
|
+
vs_agent_client_1.ApiClient])
|
|
290
191
|
], CredentialService);
|
|
291
192
|
//# 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":";;;;;;;;;;;;;;;;AAAA,mCAAmC;AAEnC,2CAA2D;AAC3D,6CAAkD;AAClD,kEAA6G;AAC7G,qCAAiE;AAEjE,sCAA2C;AAC3C,oCAA2C;AAE3C,2DAAsD;AACtD,6EAAuE;AAgBhE,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAG5B,YAEE,oBAAmE,EAEnE,oBAA2E,EAClD,MAAkC;QAH1C,yBAAoB,GAApB,oBAAoB,CAA8B;QAElD,yBAAoB,GAApB,oBAAoB,CAAsC;QACjC,WAAM,GAAN,MAAM,CAAW;QAP5C,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAA;IAQzD,CAAC;IAEG,KAAK,CAAC,0BAA0B,CACrC,6BAAqC,EACrC,UAA6C,EAAE;QAE/C,MAAM,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAA;QAC9D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAC/B,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,6BAA6B,KAAK,6BAA6B,CACzF,CAAA;QACD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAE7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC;YACxE,6BAA6B;YAC7B,iBAAiB;SAClB,CAAC,CAAA;QACF,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAA;YAC3E,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAA;QAC7E,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAEM,KAAK,CAAC,KAAK,CAChB,MAA+B,EAC/B,UAAwB,EAAE;;QAE1B,MAAM,EAAE,YAAY,EAAE,qBAAqB,GAAG,KAAK,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAA;QACvF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEjE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAC1D,MAAM,UAAU,GACd,MAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAC3B,OAAO,CAAC,sBAAsB;YAC5B,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,sBAAsB;YACjD,CAAC,CAAC,SAAS,CAAC,6BAA6B,KAAK,sBAAsB,CACvE,mCAAI,WAAW,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,2GAA2G,CAC5G,CAAA;QACH,CAAC;QACD,MAAM,EAAE,EAAE,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAA;QAEpE,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBACjD,KAAK,kBAAI,MAAM,EAAE,wBAAgB,CAAC,QAAQ,IAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAE;gBACjF,SAAS,EAAE,CAAC,oBAAoB,CAAC;aAClC,CAAC,CAAA;YACF,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,IAAI,GAAqB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;YACrG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,OAAO,MAAM,WAAW,CAAC,IAAI,CAAC,oCAAgB,kBAC5C,YAAY,IACT,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACnC,CAAA;YACJ,CAAC;YAED,IAAI,QAAQ,GAAG,MAAM,WAAW;iBAC7B,kBAAkB,CAAC,qDAAwB,EAAE,UAAU,CAAC;iBACxD,KAAK,CAAC,2DAA2D,CAAC;iBAClE,QAAQ,CAAC,2DAA2D,EAAE,EAAE,sBAAsB,EAAE,CAAC;iBACjG,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC;iBACxC,OAAO,CAAC,mBAAmB,CAAC;iBAC5B,MAAM,EAAE,CAAA;YACX,IAAI,CAAC,QAAQ;gBAAE,QAAQ,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,CAAA;YAErF,MAAM,WAAW,CAAC,IAAI,CAAC,qDAAwB,EAAE,QAAQ,CAAC,CAAA;YAC1D,OAAO,MAAM,WAAW,CAAC,IAAI,CAAC,oCAAgB,kBAC5C,YAAY,EACZ,uBAAuB,EAAE,QAAQ,CAAC,YAAY,EAC9C,kBAAkB,EAAE,QAAQ,IACzB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACnC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;YAC5D,sBAAsB;YACtB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvF,8BAA8B,EAAE,MAAA,IAAI,CAAC,kBAAkB,0CAAE,sBAAsB;YAC/E,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;YACrD,UAAU,EAAE,IAAI;SACjB,CAAC,CAAA;QACF,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAA;QACtD,IAAI,CAAC,MAAM,GAAG,wBAAgB,CAAC,OAAO,CAAA;QACtC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE1C,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,YAAY,IAAI,CAAC,CAAA;YACzC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAE7D,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,KAAK,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;gBAC7F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAC9C,sBAAsB,EACtB,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAChD,CAAA;gBACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oDAAoD,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAA;YACpG,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,oBAA4B;QACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAA;QACzD,IAAI,CAAC,MAAM,GAAG,wBAAgB,CAAC,QAAQ,CAAA;QACvC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,oBAA4B;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAA;QACzD,IAAI,CAAC,MAAM,GAAG,wBAAgB,CAAC,QAAQ,CAAA;QACvC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,YAAoB,EAAE,oBAA6B;QACrE,MAAM,OAAO,GAAqC,oBAAoB;YACpE,CAAC,CAAC;gBACE,KAAK,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,wBAAgB,CAAC,QAAQ,EAAE;gBAClE,SAAS,EAAE,CAAC,oBAAoB,CAAC;aAClC;YACH,CAAC,CAAC;gBACE,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,wBAAgB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAA,aAAG,EAAC,IAAA,gBAAM,GAAE,CAAC,EAAE;gBAC/F,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;gBAC5B,SAAS,EAAE,CAAC,oBAAoB,CAAC;aAClC,CAAA;QACL,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,mDAAmD,oBAAoB,sBAAsB,YAAY,IAAI,CAC9G,CAAA;QACH,CAAC;QACD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAsB;QACnD,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,EAAE,CAAC;YACpE,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBAC3C,8BAA8B,EAAE,IAAI,CAAC,kBAAkB,CAAC,sBAAsB;gBAC9E,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;aACtD,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,8DAA8D,CAAC,CAAA;QACvG,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,wBAAgB,CAAC,OAAO,CAAA;QACtC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IACnD,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,oBAA4B;QACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YACnD,KAAK,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,wBAAgB,CAAC,OAAO,EAAE;YACjE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC7B,CAAC,CAAA;QACF,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,oBAAoB,EAAE,CAAC,CAAA;QACrG,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,KAAK,CAAC,yBAAyB;;QACrC,MAAM,WAAW,GAA2B,EAAE,CAAA;QAC9C,IAAI,MAA0B,CAAA;QAC9B,GAAG,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;YAC9E,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YAC/B,MAAM,GAAG,MAAA,IAAI,CAAC,UAAU,mCAAI,SAAS,CAAA;QACvC,CAAC,QAAQ,MAAM,EAAC;QAChB,OAAO,WAAW,CAAA;IACpB,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,sBAA8B,EAC9B,0BAAkC,IAAI;QAEtC,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC;YAC9F,sBAAsB;YACtB,uBAAuB;SACxB,CAAC,CAAA;QACF,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC1C,sBAAsB;YACtB,sBAAsB,EAAE,8BAA8B;YACtD,YAAY,EAAE,CAAC;YACf,uBAAuB;SACxB,CAAC,CAAA;IACJ,CAAC;IAEO,IAAI,CAAC,KAAa;QACxB,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACzD,CAAC;CACF,CAAA;AAvMY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,0BAAgB,EAAC,oCAAgB,CAAC,CAAA;IAElC,WAAA,IAAA,0BAAgB,EAAC,qDAAwB,CAAC,CAAA;IAE1C,WAAA,IAAA,eAAM,EAAC,wBAAe,CAAC,CAAA;qCAHe,oBAAU;QAEV,oBAAU;QACC,2BAAS;GARlD,iBAAiB,CAuM7B"}
|
|
@@ -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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"}
|