@sphereon/ssi-sdk.data-store 0.30.2-unstable.13 → 0.30.2-unstable.14
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 +2 -1
- 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 +15 -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 +6 -6
- package/src/__tests__/digitalCredential.store.test.ts +77 -2
- package/src/__tests__/eventLogger.entities.test.ts +3 -2
- package/src/__tests__/eventLogger.store.test.ts +4 -1
- package/src/digitalCredential/DigitalCredentialStore.ts +1 -3
- package/src/entities/eventLogger/AuditEventEntity.ts +50 -3
- package/src/eventLogger/AbstractEventLoggerStore.ts +4 -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 +2 -1
- 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 +56 -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.14+710884f6",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@sphereon/kmp-mdl-mdoc": "0.2.0-SNAPSHOT.22",
|
|
18
|
-
"@sphereon/pex": "5.0.0-unstable.
|
|
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.14+710884f6",
|
|
22
|
+
"@sphereon/ssi-sdk.core": "0.30.2-unstable.14+710884f6",
|
|
23
|
+
"@sphereon/ssi-types": "0.30.2-unstable.14+710884f6",
|
|
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": "710884f670a48a38c9b3d4ca1386c9602f189951"
|
|
57
57
|
}
|
|
@@ -4,13 +4,15 @@ import { DataStoreDigitalCredentialMigrations } from '../migrations'
|
|
|
4
4
|
import { CredentialRole, DataStoreDigitalCredentialEntities } from '../index'
|
|
5
5
|
import { DigitalCredentialStore } from '../digitalCredential/DigitalCredentialStore'
|
|
6
6
|
import {
|
|
7
|
+
AddCredentialArgs,
|
|
7
8
|
CredentialCorrelationType,
|
|
8
9
|
CredentialDocumentFormat,
|
|
9
10
|
CredentialStateType,
|
|
10
11
|
DocumentType,
|
|
11
12
|
DigitalCredential,
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
GetCredentialsArgs,
|
|
14
|
+
GetCredentialsResponse,
|
|
15
|
+
} from '../types'
|
|
14
16
|
import { IVerifiablePresentation } from '@sphereon/ssi-types'
|
|
15
17
|
import { createHash } from 'crypto'
|
|
16
18
|
|
|
@@ -247,6 +249,79 @@ describe('Database entities tests', (): void => {
|
|
|
247
249
|
expect(result).toEqual(true)
|
|
248
250
|
})
|
|
249
251
|
|
|
252
|
+
it('should delete stored digital credential with children', async (): Promise<void> => {
|
|
253
|
+
const rawCredential: string =
|
|
254
|
+
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw'
|
|
255
|
+
const digitalCredential1: AddCredentialArgs = {
|
|
256
|
+
rawDocument: rawCredential,
|
|
257
|
+
kmsKeyRef: 'testRef',
|
|
258
|
+
identifierMethod: 'did',
|
|
259
|
+
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
260
|
+
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
261
|
+
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
262
|
+
subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
263
|
+
credentialRole: CredentialRole.VERIFIER,
|
|
264
|
+
tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const parentCredential: DigitalCredential = await digitalCredentialStore.addCredential(digitalCredential1)
|
|
268
|
+
|
|
269
|
+
const digitalCredential2: AddCredentialArgs = {
|
|
270
|
+
rawDocument:
|
|
271
|
+
'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksiLCJraWQiOiJkaWQ6dmVsb2NpdHk6djI6MHhjMTY3MTUxNmMyMTQ1ZDcwYjM0MGY1NjBhYjFjYjU4Y2M0ZDhhMDUyOjE2Mzc4MjY4NTEwMzM4MToxOTg2I2tleS0xIn0.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIk9wZW5CYWRnZUNyZWRlbnRpYWwiLCJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZlcmlmaWFibGVDcmVkZW50aWFsIl0sImlkIjoiZGlkOnZlbG9jaXR5OnYyOjB4YzE2NzE1MTZjMjE0NWQ3MGIzNDBmNTYwYWIxY2I1OGNjNGQ4YTA1MjoxNjM3ODI2ODUxMDMzODE6MTk4NiIsImNyZWRlbnRpYWxTdGF0dXMiOnsidHlwZSI6IlZlbG9jaXR5UmV2b2NhdGlvbkxpc3RKYW4yMDIxIiwiaWQiOiJldGhlcmV1bToweDFDMjk0NjFDNzQ4MGQxZDg1NzBkZjdjMEE0RjMxNEQwYkU4Y0Q1QmYvZ2V0UmV2b2tlZFN0YXR1cz9hZGRyZXNzPTB4YzE2NzE1MTZDMjE0NUQ3MEIzNDBGNTYwQUIxQ0I1OENjNEQ4YTA1MiZsaXN0SWQ9NTI5NDcyODgxNzIzMTQmaW5kZXg9NTYyNCJ9LCJsaW5rQ29kZUNvbW1pdG1lbnQiOnsidHlwZSI6IlZlbG9jaXR5Q3JlZGVudGlhbExpbmtDb2RlQ29tbWl0bWVudDIwMjIiLCJ2YWx1ZSI6IkVpQ3dJQmRUcmE4MVkyMjEzSVNJSXo0UDh5ejNvNDlXMStYczRmczVIc1BvMXc9PSJ9LCJpc3N1ZXIiOnsiaWQiOiJkaWQ6aW9uOkVpQmFLaWRocEhma2ZzZWpaT1UxY09YVnlhdnE4WUtfaFJfTGgwX1dCNTVQX0EifSwiY29udGVudEhhc2giOnsidHlwZSI6IlZlbG9jaXR5Q29udGVudEhhc2gyMDIwIiwidmFsdWUiOiJkNWUzMGI5Y2FlNDljYjM5MjRjZjVhZjIwMDUwOTE4ZWZjZDQ4ZTk2MzAzZTZhMDQ4NmQzZmE0ODk4NjQ1NDFlIn0sImNyZWRlbnRpYWxTY2hlbWEiOnsiaWQiOiJodHRwczovL3N0YWdpbmdyZWdpc3RyYXIudmVsb2NpdHluZXR3b3JrLmZvdW5kYXRpb24vc2NoZW1hcy9vcGVuLWJhZGdlLWNyZWRlbnRpYWwuc2NoZW1hLmpzb24iLCJ0eXBlIjoiSnNvblNjaGVtYVZhbGlkYXRvcjIwMTgifSwiY29uc2VudGVkQXQiOiIyMDIyLTExLTA3VDIxOjI0OjQ3LjcwM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpqd2s6ZXlKamNuWWlPaUp6WldOd01qVTJhekVpTENKcmRIa2lPaUpGUXlJc0luVnpaU0k2SW5OcFp5SXNJbmdpT2lKRFdVdEdjbmxOVWpOc2RubHpiemQ0UjBKeVN6QnJRMkZZYUdwSGFXdFdMV3MxT0dGSE1GSTBTWGh6SWl3aWVTSTZJakV0TkhoTFowcFBkRlZyYjNablJqVnFjVWMxTm1KeGFtbG5UMEpUTVdGT09FZEJOMUV5YURsUlJtc2lmUSJ9LCJpc3N1YW5jZURhdGUiOiIyMDIyLTExLTA3VDIxOjI5OjI5LjIzNVoifSwibmJmIjoxNjY3ODU2NTY5LCJqdGkiOiJkaWQ6dmVsb2NpdHk6djI6MHhjMTY3MTUxNmMyMTQ1ZDcwYjM0MGY1NjBhYjFjYjU4Y2M0ZDhhMDUyOjE2Mzc4MjY4NTEwMzM4MToxOTg2IiwiaXNzIjoiZGlkOmlvbjpFaUJhS2lkaHBIZmtmc2VqWk9VMWNPWFZ5YXZxOFlLX2hSX0xoMF9XQjU1UF9BIiwic3ViIjoiZGlkOmp3azpleUpqY25ZaU9pSnpaV053TWpVMmF6RWlMQ0pyZEhraU9pSkZReUlzSW5WelpTSTZJbk5wWnlJc0luZ2lPaUpEV1V0R2NubE5Vak5zZG5semJ6ZDRSMEp5U3pCclEyRllhR3BIYVd0V0xXczFPR0ZITUZJMFNYaHpJaXdpZVNJNklqRXROSGhMWjBwUGRGVnJiM1puUmpWcWNVYzFObUp4YW1sblQwSlRNV0ZPT0VkQk4xRXlhRGxSUm1zaWZRIiwiaWF0IjoxNjY3ODU2NTY5fQ.-SiM5d7UrYn1gdj2hU5T5LnLQzhIklOtoexbyebLMeha0K89vkujsbFN4HNFP2TSfRYFt0-jXwDaZ8RNKESwFA',
|
|
272
|
+
parentId: parentCredential.id,
|
|
273
|
+
kmsKeyRef: 'testRef',
|
|
274
|
+
identifierMethod: 'did',
|
|
275
|
+
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
276
|
+
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
277
|
+
issuerCorrelationId: 'did:key:z1Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
278
|
+
subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
279
|
+
credentialRole: CredentialRole.VERIFIER,
|
|
280
|
+
tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
|
|
281
|
+
}
|
|
282
|
+
const savedDigitalCredential2: DigitalCredential = await digitalCredentialStore.addCredential(digitalCredential2)
|
|
283
|
+
let deleteResult: boolean = await digitalCredentialStore.removeCredential({ id: parentCredential.id })
|
|
284
|
+
expect(deleteResult).toEqual(true)
|
|
285
|
+
await expect(() => digitalCredentialStore.getCredential({ id: savedDigitalCredential2.id })).rejects.toThrowError('No credential found for arg:')
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
it('should not delete stored parent digital credential if a child gets deleted', async (): Promise<void> => {
|
|
289
|
+
const rawCredential: string =
|
|
290
|
+
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw'
|
|
291
|
+
const digitalCredential1: AddCredentialArgs = {
|
|
292
|
+
rawDocument: rawCredential,
|
|
293
|
+
kmsKeyRef: 'testRef',
|
|
294
|
+
identifierMethod: 'did',
|
|
295
|
+
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
296
|
+
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
297
|
+
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
298
|
+
subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
299
|
+
credentialRole: CredentialRole.VERIFIER,
|
|
300
|
+
tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const parentCredential: DigitalCredential = await digitalCredentialStore.addCredential(digitalCredential1)
|
|
304
|
+
|
|
305
|
+
const digitalCredential2: AddCredentialArgs = {
|
|
306
|
+
rawDocument:
|
|
307
|
+
'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksiLCJraWQiOiJkaWQ6dmVsb2NpdHk6djI6MHhjMTY3MTUxNmMyMTQ1ZDcwYjM0MGY1NjBhYjFjYjU4Y2M0ZDhhMDUyOjE2Mzc4MjY4NTEwMzM4MToxOTg2I2tleS0xIn0.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIk9wZW5CYWRnZUNyZWRlbnRpYWwiLCJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlZlcmlmaWFibGVDcmVkZW50aWFsIl0sImlkIjoiZGlkOnZlbG9jaXR5OnYyOjB4YzE2NzE1MTZjMjE0NWQ3MGIzNDBmNTYwYWIxY2I1OGNjNGQ4YTA1MjoxNjM3ODI2ODUxMDMzODE6MTk4NiIsImNyZWRlbnRpYWxTdGF0dXMiOnsidHlwZSI6IlZlbG9jaXR5UmV2b2NhdGlvbkxpc3RKYW4yMDIxIiwiaWQiOiJldGhlcmV1bToweDFDMjk0NjFDNzQ4MGQxZDg1NzBkZjdjMEE0RjMxNEQwYkU4Y0Q1QmYvZ2V0UmV2b2tlZFN0YXR1cz9hZGRyZXNzPTB4YzE2NzE1MTZDMjE0NUQ3MEIzNDBGNTYwQUIxQ0I1OENjNEQ4YTA1MiZsaXN0SWQ9NTI5NDcyODgxNzIzMTQmaW5kZXg9NTYyNCJ9LCJsaW5rQ29kZUNvbW1pdG1lbnQiOnsidHlwZSI6IlZlbG9jaXR5Q3JlZGVudGlhbExpbmtDb2RlQ29tbWl0bWVudDIwMjIiLCJ2YWx1ZSI6IkVpQ3dJQmRUcmE4MVkyMjEzSVNJSXo0UDh5ejNvNDlXMStYczRmczVIc1BvMXc9PSJ9LCJpc3N1ZXIiOnsiaWQiOiJkaWQ6aW9uOkVpQmFLaWRocEhma2ZzZWpaT1UxY09YVnlhdnE4WUtfaFJfTGgwX1dCNTVQX0EifSwiY29udGVudEhhc2giOnsidHlwZSI6IlZlbG9jaXR5Q29udGVudEhhc2gyMDIwIiwidmFsdWUiOiJkNWUzMGI5Y2FlNDljYjM5MjRjZjVhZjIwMDUwOTE4ZWZjZDQ4ZTk2MzAzZTZhMDQ4NmQzZmE0ODk4NjQ1NDFlIn0sImNyZWRlbnRpYWxTY2hlbWEiOnsiaWQiOiJodHRwczovL3N0YWdpbmdyZWdpc3RyYXIudmVsb2NpdHluZXR3b3JrLmZvdW5kYXRpb24vc2NoZW1hcy9vcGVuLWJhZGdlLWNyZWRlbnRpYWwuc2NoZW1hLmpzb24iLCJ0eXBlIjoiSnNvblNjaGVtYVZhbGlkYXRvcjIwMTgifSwiY29uc2VudGVkQXQiOiIyMDIyLTExLTA3VDIxOjI0OjQ3LjcwM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpqd2s6ZXlKamNuWWlPaUp6WldOd01qVTJhekVpTENKcmRIa2lPaUpGUXlJc0luVnpaU0k2SW5OcFp5SXNJbmdpT2lKRFdVdEdjbmxOVWpOc2RubHpiemQ0UjBKeVN6QnJRMkZZYUdwSGFXdFdMV3MxT0dGSE1GSTBTWGh6SWl3aWVTSTZJakV0TkhoTFowcFBkRlZyYjNablJqVnFjVWMxTm1KeGFtbG5UMEpUTVdGT09FZEJOMUV5YURsUlJtc2lmUSJ9LCJpc3N1YW5jZURhdGUiOiIyMDIyLTExLTA3VDIxOjI5OjI5LjIzNVoifSwibmJmIjoxNjY3ODU2NTY5LCJqdGkiOiJkaWQ6dmVsb2NpdHk6djI6MHhjMTY3MTUxNmMyMTQ1ZDcwYjM0MGY1NjBhYjFjYjU4Y2M0ZDhhMDUyOjE2Mzc4MjY4NTEwMzM4MToxOTg2IiwiaXNzIjoiZGlkOmlvbjpFaUJhS2lkaHBIZmtmc2VqWk9VMWNPWFZ5YXZxOFlLX2hSX0xoMF9XQjU1UF9BIiwic3ViIjoiZGlkOmp3azpleUpqY25ZaU9pSnpaV053TWpVMmF6RWlMQ0pyZEhraU9pSkZReUlzSW5WelpTSTZJbk5wWnlJc0luZ2lPaUpEV1V0R2NubE5Vak5zZG5semJ6ZDRSMEp5U3pCclEyRllhR3BIYVd0V0xXczFPR0ZITUZJMFNYaHpJaXdpZVNJNklqRXROSGhMWjBwUGRGVnJiM1puUmpWcWNVYzFObUp4YW1sblQwSlRNV0ZPT0VkQk4xRXlhRGxSUm1zaWZRIiwiaWF0IjoxNjY3ODU2NTY5fQ.-SiM5d7UrYn1gdj2hU5T5LnLQzhIklOtoexbyebLMeha0K89vkujsbFN4HNFP2TSfRYFt0-jXwDaZ8RNKESwFA',
|
|
308
|
+
parentId: parentCredential.id,
|
|
309
|
+
kmsKeyRef: 'testRef',
|
|
310
|
+
identifierMethod: 'did',
|
|
311
|
+
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
312
|
+
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
313
|
+
issuerCorrelationId: 'did:key:z1Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
314
|
+
subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
315
|
+
credentialRole: CredentialRole.VERIFIER,
|
|
316
|
+
tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
|
|
317
|
+
}
|
|
318
|
+
const savedDigitalCredential2: DigitalCredential = await digitalCredentialStore.addCredential(digitalCredential2)
|
|
319
|
+
let deleteResult: boolean = await digitalCredentialStore.removeCredential({ id: savedDigitalCredential2.id })
|
|
320
|
+
expect(deleteResult).toEqual(true)
|
|
321
|
+
const fetchedCredential: DigitalCredential = await digitalCredentialStore.getCredential({ id: parentCredential.id })
|
|
322
|
+
expect(fetchedCredential.id).toEqual(parentCredential.id)
|
|
323
|
+
})
|
|
324
|
+
|
|
250
325
|
it('should not delete stored digital credential if id not found', async (): Promise<void> => {
|
|
251
326
|
const result = await digitalCredentialStore.removeCredential({ id: 'unknown_id' })
|
|
252
327
|
expect(result).toEqual(false)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DataSources } from '@sphereon/ssi-sdk.agent-config'
|
|
2
2
|
import { PartyCorrelationType } from '@sphereon/ssi-sdk.core'
|
|
3
|
-
import { ActionType, InitiatorType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
|
|
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
6
|
import { DataStoreEventLoggerMigrations } from '../migrations/generic'
|
|
7
|
-
import {
|
|
7
|
+
import { AuditEventEntity, auditEventEntityFrom } from '../entities/eventLogger/AuditEventEntity'
|
|
8
8
|
import { NonPersistedAuditLoggingEvent } from '../types'
|
|
9
9
|
|
|
10
10
|
describe('Database entities tests', (): void => {
|
|
@@ -31,6 +31,7 @@ describe('Database entities tests', (): void => {
|
|
|
31
31
|
|
|
32
32
|
it('should save audit event to database', async (): Promise<void> => {
|
|
33
33
|
const auditEvent: NonPersistedAuditLoggingEvent = {
|
|
34
|
+
type: LoggingEventType.AUDIT,
|
|
34
35
|
timestamp: new Date(),
|
|
35
36
|
level: LogLevel.DEBUG,
|
|
36
37
|
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DataSources } from '@sphereon/ssi-sdk.agent-config'
|
|
2
|
-
import { ActionType, InitiatorType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
|
|
2
|
+
import { ActionType, InitiatorType, LoggingEventType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
|
|
3
3
|
import { DataSource } from 'typeorm'
|
|
4
4
|
import { DataStoreEventLoggerMigrations } from '../migrations'
|
|
5
5
|
import { DataStoreEventLoggerEntities } from '../index'
|
|
@@ -33,6 +33,7 @@ describe('Database entities tests', (): void => {
|
|
|
33
33
|
|
|
34
34
|
it('should store audit event', async (): Promise<void> => {
|
|
35
35
|
const auditEvent: NonPersistedAuditLoggingEvent = {
|
|
36
|
+
type: LoggingEventType.AUDIT,
|
|
36
37
|
timestamp: new Date(),
|
|
37
38
|
level: LogLevel.DEBUG,
|
|
38
39
|
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
@@ -58,6 +59,7 @@ describe('Database entities tests', (): void => {
|
|
|
58
59
|
|
|
59
60
|
it('should get all audit events', async (): Promise<void> => {
|
|
60
61
|
const auditEvent: NonPersistedAuditLoggingEvent = {
|
|
62
|
+
type: LoggingEventType.AUDIT,
|
|
61
63
|
timestamp: new Date(),
|
|
62
64
|
level: LogLevel.DEBUG,
|
|
63
65
|
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
@@ -89,6 +91,7 @@ describe('Database entities tests', (): void => {
|
|
|
89
91
|
|
|
90
92
|
it('should get audit events by filter', async (): Promise<void> => {
|
|
91
93
|
const auditEvent: NonPersistedAuditLoggingEvent = {
|
|
94
|
+
type: LoggingEventType.AUDIT,
|
|
92
95
|
timestamp: new Date(),
|
|
93
96
|
level: LogLevel.DEBUG,
|
|
94
97
|
correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
@@ -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'
|
|
4
|
+
import { NonPersistedAuditLoggingEvent, NonPersistedActivityLoggingEvent } from '../../types'
|
|
5
5
|
import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'
|
|
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,9 @@
|
|
|
1
|
-
import { GetAuditEventsArgs, StoreAuditEventArgs } from '../types'
|
|
2
|
-
import { AuditLoggingEvent } from '@sphereon/ssi-sdk.core'
|
|
1
|
+
import { GetAuditEventsArgs, StoreActivityEventArgs, StoreAuditEventArgs } from '../types'
|
|
2
|
+
import { ActivityLoggingEvent, AuditLoggingEvent } from '@sphereon/ssi-sdk.core'
|
|
3
3
|
|
|
4
4
|
export abstract class AbstractEventLoggerStore {
|
|
5
5
|
abstract getAuditEvents(args: GetAuditEventsArgs): Promise<Array<AuditLoggingEvent>>
|
|
6
|
+
abstract getActivityEvents(args: GetAuditEventsArgs): Promise<Array<AuditLoggingEvent>>
|
|
6
7
|
abstract storeAuditEvent(args: StoreAuditEventArgs): Promise<AuditLoggingEvent>
|
|
8
|
+
abstract storeActivityEvent(args: StoreActivityEventArgs): Promise<ActivityLoggingEvent>
|
|
7
9
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import Debug, { Debugger } from 'debug'
|
|
2
2
|
import { DataSource } from 'typeorm'
|
|
3
|
-
import { AuditLoggingEvent } from '@sphereon/ssi-sdk.core'
|
|
3
|
+
import { ActivityLoggingEvent, AuditLoggingEvent } from '@sphereon/ssi-sdk.core'
|
|
4
4
|
import { OrPromise } from '@sphereon/ssi-types'
|
|
5
5
|
import { AbstractEventLoggerStore } from './AbstractEventLoggerStore'
|
|
6
|
-
import { AuditEventEntity, auditEventEntityFrom } from '../entities/eventLogger/AuditEventEntity'
|
|
7
|
-
import {
|
|
6
|
+
import { activityEventEntityFrom, AuditEventEntity, auditEventEntityFrom } from '../entities/eventLogger/AuditEventEntity'
|
|
7
|
+
import { activityEventFrom, auditEventFrom } from '../utils/eventLogger/MappingUtils'
|
|
8
|
+
import {GetActivityEventsArgs, GetAuditEventsArgs, StoreActivityEventArgs, StoreAuditEventArgs} from '../types'
|
|
8
9
|
|
|
9
10
|
const debug: Debugger = Debug('sphereon:ssi-sdk:event-store')
|
|
10
11
|
|
|
@@ -19,11 +20,33 @@ export class EventLoggerStore extends AbstractEventLoggerStore {
|
|
|
19
20
|
getAuditEvents = async (args?: GetAuditEventsArgs): Promise<Array<AuditLoggingEvent>> => {
|
|
20
21
|
const connection: DataSource = await this.dbConnection // TODO apply everywhere
|
|
21
22
|
debug('Getting audit events', args)
|
|
23
|
+
const where: any = {}
|
|
24
|
+
if (args?.filter) {
|
|
25
|
+
args.filter.forEach((filterCondition) => {
|
|
26
|
+
Object.assign(where, filterCondition)
|
|
27
|
+
})
|
|
28
|
+
}
|
|
22
29
|
const result: Array<AuditEventEntity> = await connection.getRepository(AuditEventEntity).find({
|
|
23
|
-
|
|
30
|
+
where,
|
|
24
31
|
})
|
|
25
32
|
|
|
26
|
-
return result.map((event: AuditEventEntity) =>
|
|
33
|
+
return result.map((event: AuditEventEntity) => auditEventFrom(event))
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
getActivityEvents = async (args?: GetActivityEventsArgs): Promise<Array<ActivityLoggingEvent>> => {
|
|
37
|
+
const connection: DataSource = await this.dbConnection
|
|
38
|
+
debug('Getting activity events', args)
|
|
39
|
+
const where: any = {}
|
|
40
|
+
if (args?.filter) {
|
|
41
|
+
args.filter.forEach((filterCondition) => {
|
|
42
|
+
Object.assign(where, filterCondition)
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
const result: Array<AuditEventEntity> = await connection.getRepository(AuditEventEntity).find({
|
|
46
|
+
where,
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
return result.map((event: AuditEventEntity) => activityEventFrom(event))
|
|
27
50
|
}
|
|
28
51
|
|
|
29
52
|
storeAuditEvent = async (args: StoreAuditEventArgs): Promise<AuditLoggingEvent> => {
|
|
@@ -34,29 +57,17 @@ export class EventLoggerStore extends AbstractEventLoggerStore {
|
|
|
34
57
|
debug('Storing audit event', auditEventEntity)
|
|
35
58
|
const createdResult: AuditEventEntity = await connection.getRepository(AuditEventEntity).save(auditEventEntity)
|
|
36
59
|
|
|
37
|
-
return
|
|
60
|
+
return auditEventFrom(createdResult)
|
|
38
61
|
}
|
|
39
62
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
initiatorType: event.initiatorType,
|
|
50
|
-
partyAlias: event.partyAlias,
|
|
51
|
-
partyCorrelationId: event.partyCorrelationId,
|
|
52
|
-
partyCorrelationType: event.partyCorrelationType,
|
|
53
|
-
subSystemType: event.subSystemType,
|
|
54
|
-
system: event.system,
|
|
55
|
-
systemAlias: event.systemAlias,
|
|
56
|
-
systemCorrelationId: event.systemCorrelationId,
|
|
57
|
-
systemCorrelationIdType: event.systemCorrelationIdType,
|
|
58
|
-
...(event.data && { data: JSON.parse(event.data) }),
|
|
59
|
-
...(event.diagnosticData && { diagnosticData: JSON.parse(event.diagnosticData) }),
|
|
63
|
+
storeActivityEvent = async (args: StoreActivityEventArgs): Promise<ActivityLoggingEvent> => {
|
|
64
|
+
const { event } = args
|
|
65
|
+
|
|
66
|
+
const activityEventEntity: AuditEventEntity = activityEventEntityFrom(event)
|
|
67
|
+
const connection: DataSource = await this.dbConnection
|
|
68
|
+
debug('Storing activity event', activityEventEntity)
|
|
69
|
+
const createdResult: AuditEventEntity = await connection.getRepository(AuditEventEntity).save(activityEventEntity)
|
|
70
|
+
|
|
71
|
+
return activityEventFrom(createdResult)
|
|
60
72
|
}
|
|
61
|
-
}
|
|
62
73
|
}
|
|
@@ -11,6 +11,7 @@ import { IssuerLocaleBrandingEntity, issuerLocaleBrandingEntityFrom } from '../e
|
|
|
11
11
|
import { BaseLocaleBrandingEntity } from '../entities/issuanceBranding/BaseLocaleBrandingEntity'
|
|
12
12
|
import { TextAttributesEntity } from '../entities/issuanceBranding/TextAttributesEntity'
|
|
13
13
|
import { AbstractIssuanceBrandingStore } from './AbstractIssuanceBrandingStore'
|
|
14
|
+
import { credentialBrandingFrom, issuerBrandingFrom, localeBrandingFrom } from '../utils/issuanceBranding/MappingUtils'
|
|
14
15
|
import {
|
|
15
16
|
IAddCredentialBrandingArgs,
|
|
16
17
|
IAddCredentialLocaleBrandingArgs,
|
|
@@ -30,7 +31,6 @@ import {
|
|
|
30
31
|
IIssuerBrandingFilter,
|
|
31
32
|
IIssuerLocaleBranding,
|
|
32
33
|
IIssuerLocaleBrandingFilter,
|
|
33
|
-
ILocaleBranding,
|
|
34
34
|
IRemoveCredentialBrandingArgs,
|
|
35
35
|
IRemoveCredentialLocaleBrandingArgs,
|
|
36
36
|
IRemoveIssuerBrandingArgs,
|
|
@@ -42,6 +42,7 @@ import {
|
|
|
42
42
|
ICredentialBrandingFilter,
|
|
43
43
|
} from '../types'
|
|
44
44
|
|
|
45
|
+
|
|
45
46
|
const debug: Debug.Debugger = Debug('sphereon:ssi-sdk:issuance-branding-store')
|
|
46
47
|
|
|
47
48
|
export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
@@ -71,7 +72,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
71
72
|
debug('Adding credential branding', credentialBrandingEntity)
|
|
72
73
|
const createdResult: CredentialBrandingEntity = await repository.save(credentialBrandingEntity)
|
|
73
74
|
|
|
74
|
-
return
|
|
75
|
+
return credentialBrandingFrom(createdResult)
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
public getCredentialBranding = async (args?: IGetCredentialBrandingArgs): Promise<Array<ICredentialBranding>> => {
|
|
@@ -89,7 +90,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
89
90
|
...(filter && { where: filter }),
|
|
90
91
|
})
|
|
91
92
|
|
|
92
|
-
return result.map((credentialBranding: CredentialBrandingEntity) =>
|
|
93
|
+
return result.map((credentialBranding: CredentialBrandingEntity) => credentialBrandingFrom(credentialBranding))
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
public removeCredentialBranding = async (args: IRemoveCredentialBrandingArgs): Promise<void> => {
|
|
@@ -133,7 +134,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
133
134
|
debug('Updating credential branding', branding)
|
|
134
135
|
const result: CredentialBrandingEntity = await repository.save(branding, { transaction: true })
|
|
135
136
|
|
|
136
|
-
return
|
|
137
|
+
return credentialBrandingFrom(result)
|
|
137
138
|
}
|
|
138
139
|
|
|
139
140
|
public addCredentialLocaleBranding = async (args: IAddCredentialLocaleBrandingArgs): Promise<ICredentialBranding> => {
|
|
@@ -188,7 +189,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
188
189
|
return Promise.reject(Error('Unable to get updated credential branding'))
|
|
189
190
|
}
|
|
190
191
|
|
|
191
|
-
return
|
|
192
|
+
return credentialBrandingFrom(result)
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
public getCredentialLocaleBranding = async (args?: IGetCredentialLocaleBrandingArgs): Promise<Array<ICredentialLocaleBranding>> => {
|
|
@@ -211,7 +212,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
211
212
|
return credentialBrandingLocale
|
|
212
213
|
? credentialBrandingLocale.map(
|
|
213
214
|
(credentialLocaleBranding: CredentialLocaleBrandingEntity) =>
|
|
214
|
-
|
|
215
|
+
localeBrandingFrom(credentialLocaleBranding) as ICredentialLocaleBranding,
|
|
215
216
|
)
|
|
216
217
|
: []
|
|
217
218
|
}
|
|
@@ -259,7 +260,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
259
260
|
debug('Updating credential locale branding', localeBranding)
|
|
260
261
|
const updatedResult: CredentialLocaleBrandingEntity = await repository.save(localeBranding, { transaction: true })
|
|
261
262
|
|
|
262
|
-
return
|
|
263
|
+
return localeBrandingFrom(updatedResult) as ICredentialLocaleBranding
|
|
263
264
|
}
|
|
264
265
|
|
|
265
266
|
public addIssuerBranding = async (args: IAddIssuerBrandingArgs): Promise<IIssuerBranding> => {
|
|
@@ -281,7 +282,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
281
282
|
debug('Adding issuer branding', issuerBrandingEntity)
|
|
282
283
|
const createdResult: IssuerBrandingEntity = await repository.save(issuerBrandingEntity)
|
|
283
284
|
|
|
284
|
-
return
|
|
285
|
+
return issuerBrandingFrom(createdResult)
|
|
285
286
|
}
|
|
286
287
|
|
|
287
288
|
public getIssuerBranding = async (args?: IGetIssuerBrandingArgs): Promise<Array<IIssuerBranding>> => {
|
|
@@ -299,7 +300,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
299
300
|
...(filter && { where: filter }),
|
|
300
301
|
})
|
|
301
302
|
|
|
302
|
-
return result.map((issuerBranding: IssuerBrandingEntity) =>
|
|
303
|
+
return result.map((issuerBranding: IssuerBrandingEntity) => issuerBrandingFrom(issuerBranding))
|
|
303
304
|
}
|
|
304
305
|
|
|
305
306
|
public removeIssuerBranding = async (args: IRemoveIssuerBrandingArgs): Promise<void> => {
|
|
@@ -343,7 +344,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
343
344
|
debug('Updating issuer branding', branding)
|
|
344
345
|
const result: IssuerBrandingEntity = await repository.save(branding, { transaction: true })
|
|
345
346
|
|
|
346
|
-
return
|
|
347
|
+
return issuerBrandingFrom(result)
|
|
347
348
|
}
|
|
348
349
|
|
|
349
350
|
public addIssuerLocaleBranding = async (args: IAddIssuerLocaleBrandingArgs): Promise<IIssuerBranding> => {
|
|
@@ -394,7 +395,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
394
395
|
return Promise.reject(Error('Unable to get updated issuer branding'))
|
|
395
396
|
}
|
|
396
397
|
|
|
397
|
-
return
|
|
398
|
+
return issuerBrandingFrom(result)
|
|
398
399
|
}
|
|
399
400
|
|
|
400
401
|
public getIssuerLocaleBranding = async (args?: IGetIssuerLocaleBrandingArgs): Promise<Array<IIssuerLocaleBranding>> => {
|
|
@@ -416,7 +417,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
416
417
|
|
|
417
418
|
return issuerLocaleBranding
|
|
418
419
|
? issuerLocaleBranding.map(
|
|
419
|
-
(issuerLocaleBranding: IssuerLocaleBrandingEntity) =>
|
|
420
|
+
(issuerLocaleBranding: IssuerLocaleBrandingEntity) => localeBrandingFrom(issuerLocaleBranding) as IIssuerLocaleBranding,
|
|
420
421
|
)
|
|
421
422
|
: []
|
|
422
423
|
}
|
|
@@ -462,56 +463,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
462
463
|
debug('Updating issuer locale branding', localeBranding)
|
|
463
464
|
const updatedResult: IssuerLocaleBrandingEntity = await repository.save(localeBranding, { transaction: true })
|
|
464
465
|
|
|
465
|
-
return
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
private credentialBrandingFrom = (credentialBranding: CredentialBrandingEntity): ICredentialBranding => {
|
|
469
|
-
const result: ICredentialBranding = {
|
|
470
|
-
...credentialBranding,
|
|
471
|
-
localeBranding: credentialBranding.localeBranding.map((localeBranding: BaseLocaleBrandingEntity) => this.localeBrandingFrom(localeBranding)),
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
return this.replaceNullWithUndefined(result)
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
private issuerBrandingFrom = (issuerBranding: IssuerBrandingEntity): IIssuerBranding => {
|
|
478
|
-
const result: IIssuerBranding = {
|
|
479
|
-
...issuerBranding,
|
|
480
|
-
localeBranding: issuerBranding.localeBranding.map((localeBranding: BaseLocaleBrandingEntity) => this.localeBrandingFrom(localeBranding)),
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
return this.replaceNullWithUndefined(result)
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
private localeBrandingFrom = (localeBranding: BaseLocaleBrandingEntity): ILocaleBranding => {
|
|
487
|
-
const result: ILocaleBranding = {
|
|
488
|
-
...localeBranding,
|
|
489
|
-
locale: localeBranding.locale === '' ? undefined : localeBranding.locale,
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
return this.replaceNullWithUndefined(result)
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
private replaceNullWithUndefined(obj: any): any {
|
|
496
|
-
if (obj === null) {
|
|
497
|
-
return undefined
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
if (typeof obj !== 'object' || obj instanceof Date) {
|
|
501
|
-
return obj
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
if (Array.isArray(obj)) {
|
|
505
|
-
return obj.map((value: any) => this.replaceNullWithUndefined(value))
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
const result: any = {}
|
|
509
|
-
for (const key in obj) {
|
|
510
|
-
if (obj.hasOwnProperty(key)) {
|
|
511
|
-
result[key] = this.replaceNullWithUndefined(obj[key])
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
return result
|
|
466
|
+
return localeBrandingFrom(updatedResult) as IIssuerLocaleBranding
|
|
515
467
|
}
|
|
516
468
|
|
|
517
469
|
private hasDuplicateLocales = async (localeBranding: Array<IBasicCredentialLocaleBranding | IBasicIssuerLocaleBranding>): Promise<boolean> => {
|
|
@@ -15,8 +15,36 @@ export class CreateAuditEvents1701634812183 implements MigrationInterface {
|
|
|
15
15
|
await queryRunner.query(`CREATE TYPE "public"."Initiator_type_enum" AS ENUM('user', 'system', 'external')`)
|
|
16
16
|
await queryRunner.query(`CREATE TYPE "public"."System_correlation_id_type_enum" AS ENUM('did', 'email', 'hostname', 'phone', 'user')`)
|
|
17
17
|
await queryRunner.query(`CREATE TYPE "public"."Party_correlation_type_enum" AS ENUM('did', 'email', 'hostname', 'phone')`)
|
|
18
|
+
await queryRunner.query(`CREATE TYPE "public"."Event_type_enum" AS ENUM('audit', 'activity', 'general')`)
|
|
19
|
+
await queryRunner.query(`CREATE TYPE "public"."Event_credential_type_enum" AS ENUM('JSON_LD', 'JWT', 'SD_JWT', 'MSO_MDOC')`)
|
|
18
20
|
await queryRunner.query(
|
|
19
|
-
`CREATE TABLE "AuditEvents" (
|
|
21
|
+
`CREATE TABLE "AuditEvents" (
|
|
22
|
+
"id" uuid NOT NULL DEFAULT uuid_generate_v4(),
|
|
23
|
+
"eventType" "public"."Event_type_enum" NOT NULL,
|
|
24
|
+
"timestamp" TIMESTAMP NOT NULL,
|
|
25
|
+
"level" "public"."Level_enum" NOT NULL,
|
|
26
|
+
"correlationId" TEXT NOT NULL,
|
|
27
|
+
"system" "public"."System_enum" NOT NULL,
|
|
28
|
+
"subSystemType" "public"."Subsystem_type_enum" NOT NULL,
|
|
29
|
+
"actionType" "public"."Action_type_enum" NOT NULL,
|
|
30
|
+
"actionSubType" TEXT NOT NULL,
|
|
31
|
+
"initiatorType" "public"."Initiator_type_enum" NOT NULL,
|
|
32
|
+
"systemCorrelationIdType" "public"."System_correlation_id_type_enum",
|
|
33
|
+
"systemCorrelationId" TEXT,
|
|
34
|
+
"systemAlias" TEXT,
|
|
35
|
+
"partyCorrelationType" "public"."Party_correlation_type_enum",
|
|
36
|
+
"partyCorrelationId" TEXT,
|
|
37
|
+
"partyAlias" TEXT,
|
|
38
|
+
"credentialType" "public"."Event_credential_type_enum",
|
|
39
|
+
"credentialHash" TEXT,
|
|
40
|
+
"originalCredential" TEXT,
|
|
41
|
+
"sharePurpose" TEXT,
|
|
42
|
+
"description" TEXT NOT NULL,
|
|
43
|
+
"data" TEXT,
|
|
44
|
+
"diagnosticData" TEXT,
|
|
45
|
+
"created_at" TIMESTAMP NOT NULL DEFAULT now(),
|
|
46
|
+
"last_updated_at" TIMESTAMP NOT NULL DEFAULT now(),
|
|
47
|
+
CONSTRAINT "PK_AuditEvents_id" PRIMARY KEY ("id"))`,
|
|
20
48
|
)
|
|
21
49
|
}
|
|
22
50
|
|