@sphereon/ssi-sdk.data-store 0.30.2-unstable.20 → 0.30.2-unstable.21
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/digitalCredential/DigitalCredentialStore.d.ts.map +1 -1
- package/dist/digitalCredential/DigitalCredentialStore.js +1 -3
- package/dist/digitalCredential/DigitalCredentialStore.js.map +1 -1
- package/dist/entities/eventLogger/AuditEventEntity.d.ts +9 -3
- package/dist/entities/eventLogger/AuditEventEntity.d.ts.map +1 -1
- package/dist/entities/eventLogger/AuditEventEntity.js +52 -1
- package/dist/entities/eventLogger/AuditEventEntity.js.map +1 -1
- package/dist/eventLogger/AbstractEventLoggerStore.d.ts +4 -2
- package/dist/eventLogger/AbstractEventLoggerStore.d.ts.map +1 -1
- package/dist/eventLogger/AbstractEventLoggerStore.js.map +1 -1
- package/dist/eventLogger/EventLoggerStore.d.ts +4 -3
- package/dist/eventLogger/EventLoggerStore.d.ts.map +1 -1
- package/dist/eventLogger/EventLoggerStore.js +34 -6
- package/dist/eventLogger/EventLoggerStore.js.map +1 -1
- package/dist/issuanceBranding/IssuanceBrandingStore.d.ts +0 -4
- package/dist/issuanceBranding/IssuanceBrandingStore.d.ts.map +1 -1
- package/dist/issuanceBranding/IssuanceBrandingStore.js +13 -42
- package/dist/issuanceBranding/IssuanceBrandingStore.js.map +1 -1
- package/dist/migrations/postgres/1701634812183-CreateAuditEvents.d.ts.map +1 -1
- package/dist/migrations/postgres/1701634812183-CreateAuditEvents.js +29 -1
- package/dist/migrations/postgres/1701634812183-CreateAuditEvents.js.map +1 -1
- package/dist/migrations/sqlite/1701634819487-CreateAuditEvents.d.ts.map +1 -1
- package/dist/migrations/sqlite/1701634819487-CreateAuditEvents.js +25 -1
- package/dist/migrations/sqlite/1701634819487-CreateAuditEvents.js.map +1 -1
- package/dist/types/eventLogger/IAbstractEventLoggerStore.d.ts +9 -2
- package/dist/types/eventLogger/IAbstractEventLoggerStore.d.ts.map +1 -1
- package/dist/types/eventLogger/eventLogger.d.ts +3 -2
- package/dist/types/eventLogger/eventLogger.d.ts.map +1 -1
- package/dist/utils/FormattingUtils.d.ts +2 -0
- package/dist/utils/FormattingUtils.d.ts.map +1 -0
- package/dist/utils/FormattingUtils.js +23 -0
- package/dist/utils/FormattingUtils.js.map +1 -0
- package/dist/utils/contact/MappingUtils.d.ts.map +1 -1
- package/dist/utils/contact/MappingUtils.js +25 -12
- package/dist/utils/contact/MappingUtils.js.map +1 -1
- package/dist/utils/digitalCredential/MappingUtils.d.ts.map +1 -1
- package/dist/utils/digitalCredential/MappingUtils.js +3 -1
- package/dist/utils/digitalCredential/MappingUtils.js.map +1 -1
- package/dist/utils/eventLogger/MappingUtils.d.ts +5 -0
- package/dist/utils/eventLogger/MappingUtils.d.ts.map +1 -0
- package/dist/utils/eventLogger/MappingUtils.js +16 -0
- package/dist/utils/eventLogger/MappingUtils.js.map +1 -0
- package/dist/utils/issuanceBranding/MappingUtils.d.ts +8 -0
- package/dist/utils/issuanceBranding/MappingUtils.d.ts.map +1 -0
- package/dist/utils/issuanceBranding/MappingUtils.js +20 -0
- package/dist/utils/issuanceBranding/MappingUtils.js.map +1 -0
- package/dist/utils/presentationDefinition/MappingUtils.d.ts.map +1 -1
- package/dist/utils/presentationDefinition/MappingUtils.js +3 -1
- package/dist/utils/presentationDefinition/MappingUtils.js.map +1 -1
- package/package.json +5 -5
- package/src/__tests__/digitalCredential.store.test.ts +83 -4
- package/src/__tests__/eventLogger.entities.test.ts +59 -5
- package/src/__tests__/eventLogger.store.test.ts +183 -3
- package/src/digitalCredential/DigitalCredentialStore.ts +1 -3
- package/src/entities/eventLogger/AuditEventEntity.ts +50 -3
- package/src/eventLogger/AbstractEventLoggerStore.ts +9 -2
- package/src/eventLogger/EventLoggerStore.ts +38 -27
- package/src/issuanceBranding/IssuanceBrandingStore.ts +14 -62
- package/src/migrations/postgres/1701634812183-CreateAuditEvents.ts +29 -1
- package/src/migrations/sqlite/1701634819487-CreateAuditEvents.ts +25 -1
- package/src/types/eventLogger/IAbstractEventLoggerStore.ts +12 -2
- package/src/types/eventLogger/eventLogger.ts +3 -2
- package/src/utils/FormattingUtils.ts +21 -0
- package/src/utils/contact/MappingUtils.ts +39 -16
- package/src/utils/digitalCredential/MappingUtils.ts +4 -1
- package/src/utils/eventLogger/MappingUtils.ts +61 -0
- package/src/utils/issuanceBranding/MappingUtils.ts +32 -0
- package/src/utils/presentationDefinition/MappingUtils.ts +4 -1
|
@@ -3,8 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.isPresentationDefinitionEqual = exports.presentationDefinitionEntityItemFrom = exports.presentationDefinitionItemFrom = void 0;
|
|
4
4
|
const PresentationDefinitionItemEntity_1 = require("../../entities/presentationDefinition/PresentationDefinitionItemEntity");
|
|
5
5
|
const blakejs_1 = require("blakejs");
|
|
6
|
+
const FormattingUtils_1 = require("../FormattingUtils");
|
|
6
7
|
const presentationDefinitionItemFrom = (entity) => {
|
|
7
|
-
|
|
8
|
+
const result = {
|
|
8
9
|
id: entity.id,
|
|
9
10
|
tenantId: entity.tenantId,
|
|
10
11
|
definitionId: entity.definitionId,
|
|
@@ -15,6 +16,7 @@ const presentationDefinitionItemFrom = (entity) => {
|
|
|
15
16
|
createdAt: entity.createdAt,
|
|
16
17
|
lastUpdatedAt: entity.lastUpdatedAt,
|
|
17
18
|
};
|
|
19
|
+
return (0, FormattingUtils_1.replaceNullWithUndefined)(result);
|
|
18
20
|
};
|
|
19
21
|
exports.presentationDefinitionItemFrom = presentationDefinitionItemFrom;
|
|
20
22
|
const presentationDefinitionEntityItemFrom = (item) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MappingUtils.js","sourceRoot":"","sources":["../../../src/utils/presentationDefinition/MappingUtils.ts"],"names":[],"mappings":";;;AAAA,6HAAyH;AAGzH,qCAAoC;
|
|
1
|
+
{"version":3,"file":"MappingUtils.js","sourceRoot":"","sources":["../../../src/utils/presentationDefinition/MappingUtils.ts"],"names":[],"mappings":";;;AAAA,6HAAyH;AAGzH,qCAAoC;AACpC,wDAA6D;AAEtD,MAAM,8BAA8B,GAAG,CAAC,MAAwC,EAA8B,EAAE;IACrH,MAAM,MAAM,GAA+B;QACzC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAA4B;QAClF,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAA;IAED,OAAO,IAAA,0CAAwB,EAAC,MAAM,CAAC,CAAA;AACzC,CAAC,CAAA;AAdY,QAAA,8BAA8B,kCAc1C;AAEM,MAAM,oCAAoC,GAAG,CAAC,IAA4C,EAAoC,EAAE;IACrI,MAAM,MAAM,GAAG,IAAI,mEAAgC,EAAE,CAAA;IAErD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC/B,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAa,CAAA;IACxC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC7B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IACvB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC7B,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAkB,CAAC,CAAA;IAClE,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAVY,QAAA,oCAAoC,wCAUhD;AAED,SAAS,WAAW,CAAC,OAAgC;IACnD,OAAO,IAAA,oBAAU,EAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,SAAgB,6BAA6B,CAAC,IAAuC,EAAE,OAA0C;IAC/H,IACE,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY;QAC1C,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ;QACjC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;QAChC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;QACzB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAC/B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACxD,OAAO,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACvF,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAhBD,sEAgBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/ssi-sdk.data-store",
|
|
3
|
-
"version": "0.30.2-unstable.
|
|
3
|
+
"version": "0.30.2-unstable.21+27723223",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"@sphereon/pex": "5.0.0-unstable.9",
|
|
19
19
|
"@sphereon/ssi-sdk-ext.did-utils": "0.24.1-unstable.130",
|
|
20
20
|
"@sphereon/ssi-sdk-ext.identifier-resolution": "0.24.1-unstable.130",
|
|
21
|
-
"@sphereon/ssi-sdk.agent-config": "0.30.2-unstable.
|
|
22
|
-
"@sphereon/ssi-sdk.core": "0.30.2-unstable.
|
|
23
|
-
"@sphereon/ssi-types": "0.30.2-unstable.
|
|
21
|
+
"@sphereon/ssi-sdk.agent-config": "0.30.2-unstable.21+27723223",
|
|
22
|
+
"@sphereon/ssi-sdk.core": "0.30.2-unstable.21+27723223",
|
|
23
|
+
"@sphereon/ssi-types": "0.30.2-unstable.21+27723223",
|
|
24
24
|
"@veramo/core": "4.2.0",
|
|
25
25
|
"@veramo/utils": "4.2.0",
|
|
26
26
|
"blakejs": "^1.2.1",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"PostgreSQL",
|
|
54
54
|
"Contact Store"
|
|
55
55
|
],
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "277232235d008aac1fdd3c5cc56adbc1d1c5948e"
|
|
57
57
|
}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { DataSources } from '@sphereon/ssi-sdk.agent-config'
|
|
2
|
+
import { IVerifiablePresentation } from '@sphereon/ssi-types'
|
|
3
|
+
import { createHash } from 'crypto'
|
|
2
4
|
import { DataSource } from 'typeorm'
|
|
3
5
|
import { DataStoreDigitalCredentialMigrations } from '../migrations'
|
|
4
6
|
import { CredentialRole, DataStoreDigitalCredentialEntities } from '../index'
|
|
5
7
|
import { DigitalCredentialStore } from '../digitalCredential/DigitalCredentialStore'
|
|
6
8
|
import {
|
|
9
|
+
AddCredentialArgs,
|
|
7
10
|
CredentialCorrelationType,
|
|
8
11
|
CredentialDocumentFormat,
|
|
9
12
|
CredentialStateType,
|
|
10
13
|
DocumentType,
|
|
11
14
|
DigitalCredential,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
import { createHash } from 'crypto'
|
|
15
|
+
GetCredentialsArgs,
|
|
16
|
+
GetCredentialsResponse,
|
|
17
|
+
} from '../types'
|
|
16
18
|
|
|
17
19
|
describe('Database entities tests', (): void => {
|
|
18
20
|
let dbConnection: DataSource
|
|
@@ -247,6 +249,83 @@ describe('Database entities tests', (): void => {
|
|
|
247
249
|
expect(result).toEqual(true)
|
|
248
250
|
})
|
|
249
251
|
|
|
252
|
+
it('should delete stored digital credential and children', async (): Promise<void> => {
|
|
253
|
+
const digitalCredentialParent: AddCredentialArgs = {
|
|
254
|
+
rawDocument:
|
|
255
|
+
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw',
|
|
256
|
+
kmsKeyRef: 'testRef',
|
|
257
|
+
identifierMethod: 'did',
|
|
258
|
+
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
259
|
+
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
260
|
+
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
261
|
+
subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
262
|
+
credentialRole: CredentialRole.VERIFIER,
|
|
263
|
+
tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj'
|
|
264
|
+
}
|
|
265
|
+
const parentCredential: DigitalCredential = await digitalCredentialStore.addCredential(digitalCredentialParent)
|
|
266
|
+
expect(parentCredential).toBeDefined()
|
|
267
|
+
|
|
268
|
+
const digitalCredentialChild: AddCredentialArgs = {
|
|
269
|
+
rawDocument:
|
|
270
|
+
'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksiLCJraWQiOiJkaWQ6dmVsb2NpdHk6djI6MHhjMTY3MTUxNmMyMTQ1ZDcwYjM0MGY1NjBhYjFjYjU4Y2M0ZDhhMDUyOjE2Mzc4MjY4NTEwMzM4MToxOTg2I2tleS0xIn0.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIk9wZW5CYWRnZUNyZWRlbnRpYWwiLCJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZlcmlmaWFibGVDcmVkZW50aWFsIl0sImlkIjoiZGlkOnZlbG9jaXR5OnYyOjB4YzE2NzE1MTZjMjE0NWQ3MGIzNDBmNTYwYWIxY2I1OGNjNGQ4YTA1MjoxNjM3ODI2ODUxMDMzODE6MTk4NiIsImNyZWRlbnRpYWxTdGF0dXMiOnsidHlwZSI6IlZlbG9jaXR5UmV2b2NhdGlvbkxpc3RKYW4yMDIxIiwiaWQiOiJldGhlcmV1bToweDFDMjk0NjFDNzQ4MGQxZDg1NzBkZjdjMEE0RjMxNEQwYkU4Y0Q1QmYvZ2V0UmV2b2tlZFN0YXR1cz9hZGRyZXNzPTB4YzE2NzE1MTZDMjE0NUQ3MEIzNDBGNTYwQUIxQ0I1OENjNEQ4YTA1MiZsaXN0SWQ9NTI5NDcyODgxNzIzMTQmaW5kZXg9NTYyNCJ9LCJsaW5rQ29kZUNvbW1pdG1lbnQiOnsidHlwZSI6IlZlbG9jaXR5Q3JlZGVudGlhbExpbmtDb2RlQ29tbWl0bWVudDIwMjIiLCJ2YWx1ZSI6IkVpQ3dJQmRUcmE4MVkyMjEzSVNJSXo0UDh5ejNvNDlXMStYczRmczVIc1BvMXc9PSJ9LCJpc3N1ZXIiOnsiaWQiOiJkaWQ6aW9uOkVpQmFLaWRocEhma2ZzZWpaT1UxY09YVnlhdnE4WUtfaFJfTGgwX1dCNTVQX0EifSwiY29udGVudEhhc2giOnsidHlwZSI6IlZlbG9jaXR5Q29udGVudEhhc2gyMDIwIiwidmFsdWUiOiJkNWUzMGI5Y2FlNDljYjM5MjRjZjVhZjIwMDUwOTE4ZWZjZDQ4ZTk2MzAzZTZhMDQ4NmQzZmE0ODk4NjQ1NDFlIn0sImNyZWRlbnRpYWxTY2hlbWEiOnsiaWQiOiJodHRwczovL3N0YWdpbmdyZWdpc3RyYXIudmVsb2NpdHluZXR3b3JrLmZvdW5kYXRpb24vc2NoZW1hcy9vcGVuLWJhZGdlLWNyZWRlbnRpYWwuc2NoZW1hLmpzb24iLCJ0eXBlIjoiSnNvblNjaGVtYVZhbGlkYXRvcjIwMTgifSwiY29uc2VudGVkQXQiOiIyMDIyLTExLTA3VDIxOjI0OjQ3LjcwM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpqd2s6ZXlKamNuWWlPaUp6WldOd01qVTJhekVpTENKcmRIa2lPaUpGUXlJc0luVnpaU0k2SW5OcFp5SXNJbmdpT2lKRFdVdEdjbmxOVWpOc2RubHpiemQ0UjBKeVN6QnJRMkZZYUdwSGFXdFdMV3MxT0dGSE1GSTBTWGh6SWl3aWVTSTZJakV0TkhoTFowcFBkRlZyYjNablJqVnFjVWMxTm1KeGFtbG5UMEpUTVdGT09FZEJOMUV5YURsUlJtc2lmUSJ9LCJpc3N1YW5jZURhdGUiOiIyMDIyLTExLTA3VDIxOjI5OjI5LjIzNVoifSwibmJmIjoxNjY3ODU2NTY5LCJqdGkiOiJkaWQ6dmVsb2NpdHk6djI6MHhjMTY3MTUxNmMyMTQ1ZDcwYjM0MGY1NjBhYjFjYjU4Y2M0ZDhhMDUyOjE2Mzc4MjY4NTEwMzM4MToxOTg2IiwiaXNzIjoiZGlkOmlvbjpFaUJhS2lkaHBIZmtmc2VqWk9VMWNPWFZ5YXZxOFlLX2hSX0xoMF9XQjU1UF9BIiwic3ViIjoiZGlkOmp3azpleUpqY25ZaU9pSnpaV053TWpVMmF6RWlMQ0pyZEhraU9pSkZReUlzSW5WelpTSTZJbk5wWnlJc0luZ2lPaUpEV1V0R2NubE5Vak5zZG5semJ6ZDRSMEp5U3pCclEyRllhR3BIYVd0V0xXczFPR0ZITUZJMFNYaHpJaXdpZVNJNklqRXROSGhMWjBwUGRGVnJiM1puUmpWcWNVYzFObUp4YW1sblQwSlRNV0ZPT0VkQk4xRXlhRGxSUm1zaWZRIiwiaWF0IjoxNjY3ODU2NTY5fQ.-SiM5d7UrYn1gdj2hU5T5LnLQzhIklOtoexbyebLMeha0K89vkujsbFN4HNFP2TSfRYFt0-jXwDaZ8RNKESwFA',
|
|
271
|
+
parentId: parentCredential.id,
|
|
272
|
+
kmsKeyRef: 'testRef',
|
|
273
|
+
identifierMethod: 'did',
|
|
274
|
+
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
275
|
+
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
276
|
+
issuerCorrelationId: 'did:key:z1Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
277
|
+
subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
278
|
+
credentialRole: CredentialRole.VERIFIER,
|
|
279
|
+
tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj'
|
|
280
|
+
}
|
|
281
|
+
const childCredential: DigitalCredential = await digitalCredentialStore.addCredential(digitalCredentialChild)
|
|
282
|
+
expect(childCredential).toBeDefined()
|
|
283
|
+
|
|
284
|
+
let deleteResult: boolean = await digitalCredentialStore.removeCredential({ id: parentCredential.id })
|
|
285
|
+
expect(deleteResult).toEqual(true)
|
|
286
|
+
|
|
287
|
+
await expect(digitalCredentialStore.getCredential({ id: childCredential.id })).rejects.toThrow(`No credential found for arg: ${JSON.stringify({ id: childCredential.id })}`)
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
it('should not delete stored parent digital credential if a child gets deleted', async (): Promise<void> => {
|
|
291
|
+
const digitalCredentialParent: AddCredentialArgs = {
|
|
292
|
+
rawDocument:
|
|
293
|
+
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw',
|
|
294
|
+
kmsKeyRef: 'testRef',
|
|
295
|
+
identifierMethod: 'did',
|
|
296
|
+
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
297
|
+
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
298
|
+
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
299
|
+
subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
300
|
+
credentialRole: CredentialRole.VERIFIER,
|
|
301
|
+
tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
|
|
302
|
+
}
|
|
303
|
+
const parentCredential: DigitalCredential = await digitalCredentialStore.addCredential(digitalCredentialParent)
|
|
304
|
+
expect(parentCredential).toBeDefined()
|
|
305
|
+
|
|
306
|
+
const digitalCredentialChild: AddCredentialArgs = {
|
|
307
|
+
rawDocument:
|
|
308
|
+
'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksiLCJraWQiOiJkaWQ6dmVsb2NpdHk6djI6MHhjMTY3MTUxNmMyMTQ1ZDcwYjM0MGY1NjBhYjFjYjU4Y2M0ZDhhMDUyOjE2Mzc4MjY4NTEwMzM4MToxOTg2I2tleS0xIn0.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIk9wZW5CYWRnZUNyZWRlbnRpYWwiLCJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZlcmlmaWFibGVDcmVkZW50aWFsIl0sImlkIjoiZGlkOnZlbG9jaXR5OnYyOjB4YzE2NzE1MTZjMjE0NWQ3MGIzNDBmNTYwYWIxY2I1OGNjNGQ4YTA1MjoxNjM3ODI2ODUxMDMzODE6MTk4NiIsImNyZWRlbnRpYWxTdGF0dXMiOnsidHlwZSI6IlZlbG9jaXR5UmV2b2NhdGlvbkxpc3RKYW4yMDIxIiwiaWQiOiJldGhlcmV1bToweDFDMjk0NjFDNzQ4MGQxZDg1NzBkZjdjMEE0RjMxNEQwYkU4Y0Q1QmYvZ2V0UmV2b2tlZFN0YXR1cz9hZGRyZXNzPTB4YzE2NzE1MTZDMjE0NUQ3MEIzNDBGNTYwQUIxQ0I1OENjNEQ4YTA1MiZsaXN0SWQ9NTI5NDcyODgxNzIzMTQmaW5kZXg9NTYyNCJ9LCJsaW5rQ29kZUNvbW1pdG1lbnQiOnsidHlwZSI6IlZlbG9jaXR5Q3JlZGVudGlhbExpbmtDb2RlQ29tbWl0bWVudDIwMjIiLCJ2YWx1ZSI6IkVpQ3dJQmRUcmE4MVkyMjEzSVNJSXo0UDh5ejNvNDlXMStYczRmczVIc1BvMXc9PSJ9LCJpc3N1ZXIiOnsiaWQiOiJkaWQ6aW9uOkVpQmFLaWRocEhma2ZzZWpaT1UxY09YVnlhdnE4WUtfaFJfTGgwX1dCNTVQX0EifSwiY29udGVudEhhc2giOnsidHlwZSI6IlZlbG9jaXR5Q29udGVudEhhc2gyMDIwIiwidmFsdWUiOiJkNWUzMGI5Y2FlNDljYjM5MjRjZjVhZjIwMDUwOTE4ZWZjZDQ4ZTk2MzAzZTZhMDQ4NmQzZmE0ODk4NjQ1NDFlIn0sImNyZWRlbnRpYWxTY2hlbWEiOnsiaWQiOiJodHRwczovL3N0YWdpbmdyZWdpc3RyYXIudmVsb2NpdHluZXR3b3JrLmZvdW5kYXRpb24vc2NoZW1hcy9vcGVuLWJhZGdlLWNyZWRlbnRpYWwuc2NoZW1hLmpzb24iLCJ0eXBlIjoiSnNvblNjaGVtYVZhbGlkYXRvcjIwMTgifSwiY29uc2VudGVkQXQiOiIyMDIyLTExLTA3VDIxOjI0OjQ3LjcwM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpqd2s6ZXlKamNuWWlPaUp6WldOd01qVTJhekVpTENKcmRIa2lPaUpGUXlJc0luVnpaU0k2SW5OcFp5SXNJbmdpT2lKRFdVdEdjbmxOVWpOc2RubHpiemQ0UjBKeVN6QnJRMkZZYUdwSGFXdFdMV3MxT0dGSE1GSTBTWGh6SWl3aWVTSTZJakV0TkhoTFowcFBkRlZyYjNablJqVnFjVWMxTm1KeGFtbG5UMEpUTVdGT09FZEJOMUV5YURsUlJtc2lmUSJ9LCJpc3N1YW5jZURhdGUiOiIyMDIyLTExLTA3VDIxOjI5OjI5LjIzNVoifSwibmJmIjoxNjY3ODU2NTY5LCJqdGkiOiJkaWQ6dmVsb2NpdHk6djI6MHhjMTY3MTUxNmMyMTQ1ZDcwYjM0MGY1NjBhYjFjYjU4Y2M0ZDhhMDUyOjE2Mzc4MjY4NTEwMzM4MToxOTg2IiwiaXNzIjoiZGlkOmlvbjpFaUJhS2lkaHBIZmtmc2VqWk9VMWNPWFZ5YXZxOFlLX2hSX0xoMF9XQjU1UF9BIiwic3ViIjoiZGlkOmp3azpleUpqY25ZaU9pSnpaV053TWpVMmF6RWlMQ0pyZEhraU9pSkZReUlzSW5WelpTSTZJbk5wWnlJc0luZ2lPaUpEV1V0R2NubE5Vak5zZG5semJ6ZDRSMEp5U3pCclEyRllhR3BIYVd0V0xXczFPR0ZITUZJMFNYaHpJaXdpZVNJNklqRXROSGhMWjBwUGRGVnJiM1puUmpWcWNVYzFObUp4YW1sblQwSlRNV0ZPT0VkQk4xRXlhRGxSUm1zaWZRIiwiaWF0IjoxNjY3ODU2NTY5fQ.-SiM5d7UrYn1gdj2hU5T5LnLQzhIklOtoexbyebLMeha0K89vkujsbFN4HNFP2TSfRYFt0-jXwDaZ8RNKESwFA',
|
|
309
|
+
parentId: parentCredential.id,
|
|
310
|
+
kmsKeyRef: 'testRef',
|
|
311
|
+
identifierMethod: 'did',
|
|
312
|
+
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
313
|
+
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
314
|
+
issuerCorrelationId: 'did:key:z1Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
315
|
+
subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
316
|
+
credentialRole: CredentialRole.VERIFIER,
|
|
317
|
+
tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
|
|
318
|
+
}
|
|
319
|
+
const childCredential: DigitalCredential = await digitalCredentialStore.addCredential(digitalCredentialChild)
|
|
320
|
+
expect(childCredential).toBeDefined()
|
|
321
|
+
|
|
322
|
+
let deleteResult: boolean = await digitalCredentialStore.removeCredential({ id: childCredential.id })
|
|
323
|
+
expect(deleteResult).toEqual(true)
|
|
324
|
+
|
|
325
|
+
const fetchedCredential: DigitalCredential = await digitalCredentialStore.getCredential({ id: parentCredential.id })
|
|
326
|
+
expect(fetchedCredential).toBeDefined()
|
|
327
|
+
})
|
|
328
|
+
|
|
250
329
|
it('should not delete stored digital credential if id not found', async (): Promise<void> => {
|
|
251
330
|
const result = await digitalCredentialStore.removeCredential({ id: 'unknown_id' })
|
|
252
331
|
expect(result).toEqual(false)
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { DataSources } from '@sphereon/ssi-sdk.agent-config'
|
|
2
|
-
import { PartyCorrelationType } from '@sphereon/ssi-sdk.core'
|
|
3
|
-
import { ActionType, InitiatorType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
|
|
2
|
+
import { CredentialType, PartyCorrelationType } from '@sphereon/ssi-sdk.core'
|
|
3
|
+
import { ActionType, InitiatorType, LoggingEventType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
|
|
4
4
|
import { DataSource } from 'typeorm'
|
|
5
5
|
import { DataStoreEventLoggerEntities } from '../index'
|
|
6
|
-
import { DataStoreEventLoggerMigrations } from '../migrations
|
|
7
|
-
import {
|
|
8
|
-
|
|
6
|
+
import { DataStoreEventLoggerMigrations } from '../migrations'
|
|
7
|
+
import {
|
|
8
|
+
activityEventEntityFrom,
|
|
9
|
+
auditEventEntityFrom,
|
|
10
|
+
AuditEventEntity
|
|
11
|
+
} from '../entities/eventLogger/AuditEventEntity'
|
|
12
|
+
import { NonPersistedAuditLoggingEvent, NonPersistedActivityLoggingEvent } from '../types'
|
|
9
13
|
|
|
10
14
|
describe('Database entities tests', (): void => {
|
|
11
15
|
let dbConnection: DataSource
|
|
@@ -55,6 +59,56 @@ describe('Database entities tests', (): void => {
|
|
|
55
59
|
|
|
56
60
|
expect(fromDb).toBeDefined()
|
|
57
61
|
expect(fromDb?.id).not.toBeNull()
|
|
62
|
+
expect(fromDb?.type).toEqual(LoggingEventType.AUDIT)
|
|
63
|
+
expect(fromDb?.timestamp).toEqual(auditEvent.timestamp)
|
|
64
|
+
expect(fromDb?.level).toEqual(auditEvent.level)
|
|
65
|
+
expect(fromDb?.correlationId).toEqual(auditEvent.correlationId)
|
|
66
|
+
expect(fromDb?.system).toEqual(auditEvent.system)
|
|
67
|
+
expect(fromDb?.subSystemType).toEqual(auditEvent.subSystemType)
|
|
68
|
+
expect(fromDb?.actionType).toEqual(auditEvent.actionType)
|
|
69
|
+
expect(fromDb?.actionSubType).toEqual(auditEvent.actionSubType)
|
|
70
|
+
expect(fromDb?.initiatorType).toEqual(auditEvent.initiatorType)
|
|
71
|
+
expect(fromDb?.systemCorrelationIdType).toEqual(auditEvent.systemCorrelationIdType)
|
|
72
|
+
expect(fromDb?.systemCorrelationId).toEqual(auditEvent.systemCorrelationId)
|
|
73
|
+
expect(fromDb?.systemAlias).toEqual(auditEvent.systemAlias)
|
|
74
|
+
expect(fromDb?.partyCorrelationType).toEqual(auditEvent.partyCorrelationType)
|
|
75
|
+
expect(fromDb?.partyCorrelationId).toEqual(auditEvent.partyCorrelationId)
|
|
76
|
+
expect(fromDb?.partyAlias).toEqual(auditEvent.partyAlias)
|
|
77
|
+
expect(fromDb?.description).toEqual(auditEvent.description)
|
|
78
|
+
expect(fromDb?.data).toEqual(JSON.stringify(auditEvent.data))
|
|
79
|
+
expect(fromDb?.diagnosticData).toEqual(JSON.stringify(auditEvent.diagnosticData))
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
it('should save activity event to database', async (): Promise<void> => {
|
|
83
|
+
const auditEvent: NonPersistedActivityLoggingEvent = {
|
|
84
|
+
timestamp: new Date(),
|
|
85
|
+
level: LogLevel.DEBUG,
|
|
86
|
+
originalCredential: 'test_credential_string',
|
|
87
|
+
credentialHash: 'test_credential_hash',
|
|
88
|
+
credentialType: CredentialType.SD_JWT,
|
|
89
|
+
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
90
|
+
system: System.GENERAL,
|
|
91
|
+
subSystemType: SubSystem.DID_PROVIDER,
|
|
92
|
+
actionType: ActionType.CREATE,
|
|
93
|
+
actionSubType: 'Key generation',
|
|
94
|
+
initiatorType: InitiatorType.EXTERNAL,
|
|
95
|
+
systemCorrelationIdType: SystemCorrelationIdType.DID,
|
|
96
|
+
systemCorrelationId: 'did:example:123456789abcdefghi',
|
|
97
|
+
systemAlias: 'test_alias',
|
|
98
|
+
partyCorrelationType: PartyCorrelationType.DID,
|
|
99
|
+
partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
|
|
100
|
+
partyAlias: 'test_alias',
|
|
101
|
+
description: 'test_description',
|
|
102
|
+
data: 'test_data_string',
|
|
103
|
+
diagnosticData: { data: 'test_data_string' },
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const activityEventEntity: AuditEventEntity = activityEventEntityFrom(auditEvent)
|
|
107
|
+
const fromDb: AuditEventEntity = await dbConnection.getRepository(AuditEventEntity).save(activityEventEntity)
|
|
108
|
+
|
|
109
|
+
expect(fromDb).toBeDefined()
|
|
110
|
+
expect(fromDb?.id).not.toBeNull()
|
|
111
|
+
expect(fromDb?.type).toEqual(LoggingEventType.ACTIVITY)
|
|
58
112
|
expect(fromDb?.timestamp).toEqual(auditEvent.timestamp)
|
|
59
113
|
expect(fromDb?.level).toEqual(auditEvent.level)
|
|
60
114
|
expect(fromDb?.correlationId).toEqual(auditEvent.correlationId)
|
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
import { DataSources } from '@sphereon/ssi-sdk.agent-config'
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
ActivityLoggingEvent,
|
|
4
|
+
AuditLoggingEvent,
|
|
5
|
+
CredentialType,
|
|
6
|
+
PartyCorrelationType
|
|
7
|
+
} from '@sphereon/ssi-sdk.core'
|
|
8
|
+
import {
|
|
9
|
+
ActionType,
|
|
10
|
+
InitiatorType,
|
|
11
|
+
LoggingEventType,
|
|
12
|
+
LogLevel,
|
|
13
|
+
SubSystem,
|
|
14
|
+
System,
|
|
15
|
+
SystemCorrelationIdType
|
|
16
|
+
} from '@sphereon/ssi-types'
|
|
3
17
|
import { DataSource } from 'typeorm'
|
|
4
18
|
import { DataStoreEventLoggerMigrations } from '../migrations'
|
|
5
19
|
import { DataStoreEventLoggerEntities } from '../index'
|
|
6
|
-
import { AuditLoggingEvent, PartyCorrelationType } from '@sphereon/ssi-sdk.core'
|
|
7
20
|
import { EventLoggerStore } from '../eventLogger/EventLoggerStore'
|
|
8
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
GetActivityEventsArgs,
|
|
23
|
+
GetAuditEventsArgs,
|
|
24
|
+
NonPersistedAuditLoggingEvent,
|
|
25
|
+
NonPersistedActivityLoggingEvent
|
|
26
|
+
} from '../types'
|
|
9
27
|
|
|
10
28
|
describe('Database entities tests', (): void => {
|
|
11
29
|
let dbConnection: DataSource
|
|
@@ -54,6 +72,7 @@ describe('Database entities tests', (): void => {
|
|
|
54
72
|
|
|
55
73
|
const savedAuditEvent: AuditLoggingEvent = await eventLoggerStore.storeAuditEvent({ event: auditEvent })
|
|
56
74
|
expect(savedAuditEvent).toBeDefined()
|
|
75
|
+
expect(savedAuditEvent.type).toEqual(LoggingEventType.AUDIT)
|
|
57
76
|
})
|
|
58
77
|
|
|
59
78
|
it('should get all audit events', async (): Promise<void> => {
|
|
@@ -120,6 +139,29 @@ describe('Database entities tests', (): void => {
|
|
|
120
139
|
})
|
|
121
140
|
|
|
122
141
|
it('should return no audit events if filter does not match', async (): Promise<void> => {
|
|
142
|
+
const auditEvent: NonPersistedAuditLoggingEvent = {
|
|
143
|
+
timestamp: new Date(),
|
|
144
|
+
level: LogLevel.DEBUG,
|
|
145
|
+
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
146
|
+
system: System.GENERAL,
|
|
147
|
+
subSystemType: SubSystem.DID_PROVIDER,
|
|
148
|
+
actionType: ActionType.CREATE,
|
|
149
|
+
actionSubType: 'Key generation',
|
|
150
|
+
initiatorType: InitiatorType.EXTERNAL,
|
|
151
|
+
systemCorrelationIdType: SystemCorrelationIdType.DID,
|
|
152
|
+
systemCorrelationId: 'did:example:123456789abcdefghi',
|
|
153
|
+
systemAlias: 'test_alias',
|
|
154
|
+
partyCorrelationType: PartyCorrelationType.DID,
|
|
155
|
+
partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
|
|
156
|
+
partyAlias: 'test_alias',
|
|
157
|
+
description: 'test_description',
|
|
158
|
+
data: 'test_data_string',
|
|
159
|
+
diagnosticData: { data: 'test_data_string' },
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const savedAuditEvent: AuditLoggingEvent = await eventLoggerStore.storeAuditEvent({ event: auditEvent })
|
|
163
|
+
expect(savedAuditEvent).toBeDefined()
|
|
164
|
+
|
|
123
165
|
const args: GetAuditEventsArgs = {
|
|
124
166
|
filter: [{ correlationId: 'unknown_id' }],
|
|
125
167
|
}
|
|
@@ -127,4 +169,142 @@ describe('Database entities tests', (): void => {
|
|
|
127
169
|
|
|
128
170
|
expect(result.length).toEqual(0)
|
|
129
171
|
})
|
|
172
|
+
|
|
173
|
+
it('should store activity event', async (): Promise<void> => {
|
|
174
|
+
const activityEvent: NonPersistedActivityLoggingEvent = {
|
|
175
|
+
timestamp: new Date(),
|
|
176
|
+
level: LogLevel.DEBUG,
|
|
177
|
+
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
178
|
+
originalCredential: 'test_credential_string',
|
|
179
|
+
credentialHash: 'test_credential_hash',
|
|
180
|
+
credentialType: CredentialType.SD_JWT,
|
|
181
|
+
system: System.GENERAL,
|
|
182
|
+
subSystemType: SubSystem.DID_PROVIDER,
|
|
183
|
+
actionType: ActionType.CREATE,
|
|
184
|
+
actionSubType: 'Key generation',
|
|
185
|
+
initiatorType: InitiatorType.EXTERNAL,
|
|
186
|
+
systemCorrelationIdType: SystemCorrelationIdType.DID,
|
|
187
|
+
systemCorrelationId: 'did:example:123456789abcdefghi',
|
|
188
|
+
systemAlias: 'test_alias',
|
|
189
|
+
partyCorrelationType: PartyCorrelationType.DID,
|
|
190
|
+
partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
|
|
191
|
+
partyAlias: 'test_alias',
|
|
192
|
+
description: 'test_description',
|
|
193
|
+
data: 'test_data_string',
|
|
194
|
+
diagnosticData: { data: 'test_data_string' },
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const savedActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
|
|
198
|
+
expect(savedActivityEvent).toBeDefined()
|
|
199
|
+
expect(savedActivityEvent.type).toEqual(LoggingEventType.ACTIVITY)
|
|
200
|
+
expect(savedActivityEvent.originalCredential).toEqual(activityEvent.originalCredential)
|
|
201
|
+
expect(savedActivityEvent.credentialHash).toEqual(activityEvent.credentialHash)
|
|
202
|
+
expect(savedActivityEvent.credentialType).toEqual(activityEvent.credentialType)
|
|
203
|
+
expect(savedActivityEvent.data).toEqual(activityEvent.data)
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
it('should get all activity events', async (): Promise<void> => {
|
|
207
|
+
const activityEvent: NonPersistedActivityLoggingEvent = {
|
|
208
|
+
timestamp: new Date(),
|
|
209
|
+
level: LogLevel.DEBUG,
|
|
210
|
+
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
211
|
+
originalCredential: 'test_credential_string',
|
|
212
|
+
credentialHash: 'test_credential_hash',
|
|
213
|
+
credentialType: CredentialType.SD_JWT,
|
|
214
|
+
system: System.GENERAL,
|
|
215
|
+
subSystemType: SubSystem.DID_PROVIDER,
|
|
216
|
+
actionType: ActionType.CREATE,
|
|
217
|
+
actionSubType: 'Key generation',
|
|
218
|
+
initiatorType: InitiatorType.EXTERNAL,
|
|
219
|
+
systemCorrelationIdType: SystemCorrelationIdType.DID,
|
|
220
|
+
systemCorrelationId: 'did:example:123456789abcdefghi',
|
|
221
|
+
systemAlias: 'test_alias',
|
|
222
|
+
partyCorrelationType: PartyCorrelationType.DID,
|
|
223
|
+
partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
|
|
224
|
+
partyAlias: 'test_alias',
|
|
225
|
+
description: 'test_description',
|
|
226
|
+
data: 'test_data_string',
|
|
227
|
+
diagnosticData: { data: 'test_data_string' },
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
const activityEvent1: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
|
|
231
|
+
expect(activityEvent1).toBeDefined()
|
|
232
|
+
|
|
233
|
+
const activityEvent2: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
|
|
234
|
+
expect(activityEvent2).toBeDefined()
|
|
235
|
+
|
|
236
|
+
const result: Array<ActivityLoggingEvent> = await eventLoggerStore.getActivityEvents()
|
|
237
|
+
expect(result.length).toEqual(2)
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
it('should get activity events by filter', async (): Promise<void> => {
|
|
241
|
+
const activityEvent: NonPersistedActivityLoggingEvent = {
|
|
242
|
+
timestamp: new Date(),
|
|
243
|
+
level: LogLevel.DEBUG,
|
|
244
|
+
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
245
|
+
originalCredential: 'test_credential_string',
|
|
246
|
+
credentialHash: 'test_credential_hash',
|
|
247
|
+
credentialType: CredentialType.SD_JWT,
|
|
248
|
+
system: System.GENERAL,
|
|
249
|
+
subSystemType: SubSystem.DID_PROVIDER,
|
|
250
|
+
actionType: ActionType.CREATE,
|
|
251
|
+
actionSubType: 'Key generation',
|
|
252
|
+
initiatorType: InitiatorType.EXTERNAL,
|
|
253
|
+
systemCorrelationIdType: SystemCorrelationIdType.DID,
|
|
254
|
+
systemCorrelationId: 'did:example:123456789abcdefghi',
|
|
255
|
+
systemAlias: 'test_alias',
|
|
256
|
+
partyCorrelationType: PartyCorrelationType.DID,
|
|
257
|
+
partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
|
|
258
|
+
partyAlias: 'test_alias',
|
|
259
|
+
description: 'test_description',
|
|
260
|
+
data: 'test_data_string',
|
|
261
|
+
diagnosticData: { data: 'test_data_string' },
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const savedActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
|
|
265
|
+
expect(savedActivityEvent).toBeDefined()
|
|
266
|
+
|
|
267
|
+
const args: GetActivityEventsArgs = {
|
|
268
|
+
filter: [{ credentialHash: savedActivityEvent.credentialHash }],
|
|
269
|
+
}
|
|
270
|
+
const result: Array<ActivityLoggingEvent> = await eventLoggerStore.getActivityEvents(args)
|
|
271
|
+
|
|
272
|
+
expect(result.length).toEqual(1)
|
|
273
|
+
})
|
|
274
|
+
|
|
275
|
+
it('should return no audit events if filter does not match', async (): Promise<void> => {
|
|
276
|
+
const activityEvent: NonPersistedActivityLoggingEvent = {
|
|
277
|
+
timestamp: new Date(),
|
|
278
|
+
level: LogLevel.DEBUG,
|
|
279
|
+
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
280
|
+
originalCredential: 'test_credential_string',
|
|
281
|
+
credentialHash: 'test_credential_hash',
|
|
282
|
+
credentialType: CredentialType.SD_JWT,
|
|
283
|
+
system: System.GENERAL,
|
|
284
|
+
subSystemType: SubSystem.DID_PROVIDER,
|
|
285
|
+
actionType: ActionType.CREATE,
|
|
286
|
+
actionSubType: 'Key generation',
|
|
287
|
+
initiatorType: InitiatorType.EXTERNAL,
|
|
288
|
+
systemCorrelationIdType: SystemCorrelationIdType.DID,
|
|
289
|
+
systemCorrelationId: 'did:example:123456789abcdefghi',
|
|
290
|
+
systemAlias: 'test_alias',
|
|
291
|
+
partyCorrelationType: PartyCorrelationType.DID,
|
|
292
|
+
partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
|
|
293
|
+
partyAlias: 'test_alias',
|
|
294
|
+
description: 'test_description',
|
|
295
|
+
data: 'test_data_string',
|
|
296
|
+
diagnosticData: { data: 'test_data_string' },
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const savedActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
|
|
300
|
+
expect(savedActivityEvent).toBeDefined()
|
|
301
|
+
|
|
302
|
+
const args: GetActivityEventsArgs = {
|
|
303
|
+
filter: [{ credentialHash: 'unknown_hash' }],
|
|
304
|
+
}
|
|
305
|
+
const result: Array<ActivityLoggingEvent> = await eventLoggerStore.getActivityEvents(args)
|
|
306
|
+
|
|
307
|
+
expect(result.length).toEqual(0)
|
|
308
|
+
})
|
|
309
|
+
|
|
130
310
|
})
|
|
@@ -106,9 +106,7 @@ export class DigitalCredentialStore extends AbstractDigitalCredentialStore {
|
|
|
106
106
|
let affected: number = 0
|
|
107
107
|
const findResult = await dcRepo.findBy(query)
|
|
108
108
|
for (const dc of findResult) {
|
|
109
|
-
|
|
110
|
-
affected += await this.deleteTree(dcRepo, { id: dc.parentId })
|
|
111
|
-
}
|
|
109
|
+
affected += await this.deleteTree(dcRepo, { parentId: dc.id })
|
|
112
110
|
const result = await dcRepo.delete(dc.id)
|
|
113
111
|
if (result.affected) {
|
|
114
112
|
affected += result.affected
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { ActionSubType, ActionType, InitiatorType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
|
|
1
|
+
import { ActionSubType, ActionType, InitiatorType, LoggingEventType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
|
|
2
2
|
import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'
|
|
3
|
-
import { PartyCorrelationType } from '@sphereon/ssi-sdk.core'
|
|
4
|
-
import { NonPersistedAuditLoggingEvent } from '../../types'
|
|
3
|
+
import { CredentialType, PartyCorrelationType } from '@sphereon/ssi-sdk.core'
|
|
5
4
|
import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'
|
|
5
|
+
import { NonPersistedAuditLoggingEvent, NonPersistedActivityLoggingEvent } from '../../types'
|
|
6
6
|
|
|
7
|
+
//TODO this entity, also contains some optional fields that are related to another event type (Activity) later we might want to refactor and reorganize this.
|
|
8
|
+
// For now I've added a discriminator value called eventType that can be one of the three types of events: 1. General, 2. Audit, and 3. Activity
|
|
7
9
|
@Entity('AuditEvents')
|
|
8
10
|
export class AuditEventEntity extends BaseEntity {
|
|
9
11
|
@PrimaryGeneratedColumn('uuid')
|
|
@@ -12,6 +14,9 @@ export class AuditEventEntity extends BaseEntity {
|
|
|
12
14
|
@Column({ name: 'timestamp', nullable: false, unique: false, type: typeOrmDateTime() })
|
|
13
15
|
timestamp!: Date
|
|
14
16
|
|
|
17
|
+
@Column('simple-enum', { name: 'eventType', enum: LoggingEventType, nullable: false, unique: false })
|
|
18
|
+
type!: LoggingEventType
|
|
19
|
+
|
|
15
20
|
@Column('simple-enum', { name: 'level', enum: LogLevel, nullable: false, unique: false })
|
|
16
21
|
level!: LogLevel
|
|
17
22
|
|
|
@@ -54,6 +59,18 @@ export class AuditEventEntity extends BaseEntity {
|
|
|
54
59
|
@Column('text', { name: 'description', nullable: false, unique: false })
|
|
55
60
|
description!: string
|
|
56
61
|
|
|
62
|
+
@Column('simple-enum', { name: 'credentialType', enum: CredentialType, nullable: true, unique: false })
|
|
63
|
+
credentialType?: CredentialType
|
|
64
|
+
|
|
65
|
+
@Column('text', { name: 'credentialHash', nullable: true, unique: false })
|
|
66
|
+
credentialHash?: string
|
|
67
|
+
|
|
68
|
+
@Column('text', { name: 'originalCredential', nullable: true, unique: false })
|
|
69
|
+
originalCredential?: string
|
|
70
|
+
|
|
71
|
+
@Column('text', { name: 'sharePurpose', nullable: true, unique: false })
|
|
72
|
+
sharePurpose?: string
|
|
73
|
+
|
|
57
74
|
@Column('text', { name: 'data', nullable: true, unique: false })
|
|
58
75
|
data?: string
|
|
59
76
|
|
|
@@ -69,6 +86,7 @@ export class AuditEventEntity extends BaseEntity {
|
|
|
69
86
|
|
|
70
87
|
export const auditEventEntityFrom = (args: NonPersistedAuditLoggingEvent): AuditEventEntity => {
|
|
71
88
|
const auditEventEntity: AuditEventEntity = new AuditEventEntity()
|
|
89
|
+
auditEventEntity.type = LoggingEventType.AUDIT
|
|
72
90
|
auditEventEntity.timestamp = args.timestamp
|
|
73
91
|
auditEventEntity.level = args.level
|
|
74
92
|
auditEventEntity.correlationId = args.correlationId
|
|
@@ -90,3 +108,32 @@ export const auditEventEntityFrom = (args: NonPersistedAuditLoggingEvent): Audit
|
|
|
90
108
|
|
|
91
109
|
return auditEventEntity
|
|
92
110
|
}
|
|
111
|
+
|
|
112
|
+
export const activityEventEntityFrom = (args: NonPersistedActivityLoggingEvent): AuditEventEntity => {
|
|
113
|
+
const activityEventEntity: AuditEventEntity = new AuditEventEntity()
|
|
114
|
+
activityEventEntity.type = LoggingEventType.ACTIVITY
|
|
115
|
+
activityEventEntity.timestamp = args.timestamp
|
|
116
|
+
activityEventEntity.level = args.level
|
|
117
|
+
activityEventEntity.correlationId = args.correlationId
|
|
118
|
+
activityEventEntity.system = args.system
|
|
119
|
+
activityEventEntity.subSystemType = args.subSystemType
|
|
120
|
+
activityEventEntity.actionType = args.actionType
|
|
121
|
+
activityEventEntity.actionSubType = args.actionSubType
|
|
122
|
+
activityEventEntity.initiatorType = args.initiatorType
|
|
123
|
+
activityEventEntity.systemCorrelationIdType = args.systemCorrelationIdType
|
|
124
|
+
activityEventEntity.systemCorrelationId = args.systemCorrelationId
|
|
125
|
+
activityEventEntity.systemAlias = args.systemAlias
|
|
126
|
+
activityEventEntity.partyCorrelationType = args.partyCorrelationType
|
|
127
|
+
activityEventEntity.partyCorrelationId = args.partyCorrelationId
|
|
128
|
+
activityEventEntity.partyAlias = args.partyAlias
|
|
129
|
+
activityEventEntity.description = args.description
|
|
130
|
+
activityEventEntity.partyCorrelationType = args.partyCorrelationType
|
|
131
|
+
activityEventEntity.data = JSON.stringify(args.data)
|
|
132
|
+
activityEventEntity.sharePurpose = args.sharePurpose
|
|
133
|
+
activityEventEntity.credentialType = args.credentialType
|
|
134
|
+
activityEventEntity.originalCredential = args.originalCredential
|
|
135
|
+
activityEventEntity.credentialHash = args.credentialHash
|
|
136
|
+
activityEventEntity.diagnosticData = JSON.stringify(args.diagnosticData)
|
|
137
|
+
|
|
138
|
+
return activityEventEntity
|
|
139
|
+
}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ActivityLoggingEvent, AuditLoggingEvent } from '@sphereon/ssi-sdk.core'
|
|
2
|
+
import {
|
|
3
|
+
GetActivityEventsArgs,
|
|
4
|
+
GetAuditEventsArgs,
|
|
5
|
+
StoreActivityEventArgs,
|
|
6
|
+
StoreAuditEventArgs
|
|
7
|
+
} from '../types'
|
|
3
8
|
|
|
4
9
|
export abstract class AbstractEventLoggerStore {
|
|
5
10
|
abstract getAuditEvents(args: GetAuditEventsArgs): Promise<Array<AuditLoggingEvent>>
|
|
11
|
+
abstract getActivityEvents(args: GetActivityEventsArgs): Promise<Array<ActivityLoggingEvent>>
|
|
6
12
|
abstract storeAuditEvent(args: StoreAuditEventArgs): Promise<AuditLoggingEvent>
|
|
13
|
+
abstract storeActivityEvent(args: StoreActivityEventArgs): Promise<ActivityLoggingEvent>
|
|
7
14
|
}
|