@sphereon/ssi-sdk.data-store 0.30.2-unstable.19 → 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.
Files changed (68) hide show
  1. package/dist/digitalCredential/DigitalCredentialStore.d.ts.map +1 -1
  2. package/dist/digitalCredential/DigitalCredentialStore.js +1 -3
  3. package/dist/digitalCredential/DigitalCredentialStore.js.map +1 -1
  4. package/dist/entities/eventLogger/AuditEventEntity.d.ts +9 -3
  5. package/dist/entities/eventLogger/AuditEventEntity.d.ts.map +1 -1
  6. package/dist/entities/eventLogger/AuditEventEntity.js +52 -1
  7. package/dist/entities/eventLogger/AuditEventEntity.js.map +1 -1
  8. package/dist/eventLogger/AbstractEventLoggerStore.d.ts +4 -2
  9. package/dist/eventLogger/AbstractEventLoggerStore.d.ts.map +1 -1
  10. package/dist/eventLogger/AbstractEventLoggerStore.js.map +1 -1
  11. package/dist/eventLogger/EventLoggerStore.d.ts +4 -3
  12. package/dist/eventLogger/EventLoggerStore.d.ts.map +1 -1
  13. package/dist/eventLogger/EventLoggerStore.js +34 -6
  14. package/dist/eventLogger/EventLoggerStore.js.map +1 -1
  15. package/dist/issuanceBranding/IssuanceBrandingStore.d.ts +0 -4
  16. package/dist/issuanceBranding/IssuanceBrandingStore.d.ts.map +1 -1
  17. package/dist/issuanceBranding/IssuanceBrandingStore.js +13 -42
  18. package/dist/issuanceBranding/IssuanceBrandingStore.js.map +1 -1
  19. package/dist/migrations/postgres/1701634812183-CreateAuditEvents.d.ts.map +1 -1
  20. package/dist/migrations/postgres/1701634812183-CreateAuditEvents.js +29 -1
  21. package/dist/migrations/postgres/1701634812183-CreateAuditEvents.js.map +1 -1
  22. package/dist/migrations/sqlite/1701634819487-CreateAuditEvents.d.ts.map +1 -1
  23. package/dist/migrations/sqlite/1701634819487-CreateAuditEvents.js +25 -1
  24. package/dist/migrations/sqlite/1701634819487-CreateAuditEvents.js.map +1 -1
  25. package/dist/types/eventLogger/IAbstractEventLoggerStore.d.ts +9 -2
  26. package/dist/types/eventLogger/IAbstractEventLoggerStore.d.ts.map +1 -1
  27. package/dist/types/eventLogger/eventLogger.d.ts +3 -2
  28. package/dist/types/eventLogger/eventLogger.d.ts.map +1 -1
  29. package/dist/utils/FormattingUtils.d.ts +2 -0
  30. package/dist/utils/FormattingUtils.d.ts.map +1 -0
  31. package/dist/utils/FormattingUtils.js +23 -0
  32. package/dist/utils/FormattingUtils.js.map +1 -0
  33. package/dist/utils/contact/MappingUtils.d.ts.map +1 -1
  34. package/dist/utils/contact/MappingUtils.js +25 -12
  35. package/dist/utils/contact/MappingUtils.js.map +1 -1
  36. package/dist/utils/digitalCredential/MappingUtils.d.ts.map +1 -1
  37. package/dist/utils/digitalCredential/MappingUtils.js +3 -1
  38. package/dist/utils/digitalCredential/MappingUtils.js.map +1 -1
  39. package/dist/utils/eventLogger/MappingUtils.d.ts +5 -0
  40. package/dist/utils/eventLogger/MappingUtils.d.ts.map +1 -0
  41. package/dist/utils/eventLogger/MappingUtils.js +16 -0
  42. package/dist/utils/eventLogger/MappingUtils.js.map +1 -0
  43. package/dist/utils/issuanceBranding/MappingUtils.d.ts +8 -0
  44. package/dist/utils/issuanceBranding/MappingUtils.d.ts.map +1 -0
  45. package/dist/utils/issuanceBranding/MappingUtils.js +20 -0
  46. package/dist/utils/issuanceBranding/MappingUtils.js.map +1 -0
  47. package/dist/utils/presentationDefinition/MappingUtils.d.ts.map +1 -1
  48. package/dist/utils/presentationDefinition/MappingUtils.js +3 -1
  49. package/dist/utils/presentationDefinition/MappingUtils.js.map +1 -1
  50. package/package.json +5 -5
  51. package/src/__tests__/digitalCredential.store.test.ts +83 -4
  52. package/src/__tests__/eventLogger.entities.test.ts +59 -5
  53. package/src/__tests__/eventLogger.store.test.ts +183 -3
  54. package/src/digitalCredential/DigitalCredentialStore.ts +1 -3
  55. package/src/entities/eventLogger/AuditEventEntity.ts +50 -3
  56. package/src/eventLogger/AbstractEventLoggerStore.ts +9 -2
  57. package/src/eventLogger/EventLoggerStore.ts +38 -27
  58. package/src/issuanceBranding/IssuanceBrandingStore.ts +14 -62
  59. package/src/migrations/postgres/1701634812183-CreateAuditEvents.ts +29 -1
  60. package/src/migrations/sqlite/1701634819487-CreateAuditEvents.ts +25 -1
  61. package/src/types/eventLogger/IAbstractEventLoggerStore.ts +12 -2
  62. package/src/types/eventLogger/eventLogger.ts +3 -2
  63. package/src/utils/FormattingUtils.ts +21 -0
  64. package/src/utils/contact/MappingUtils.ts +39 -16
  65. package/src/utils/digitalCredential/MappingUtils.ts +4 -1
  66. package/src/utils/eventLogger/MappingUtils.ts +61 -0
  67. package/src/utils/issuanceBranding/MappingUtils.ts +32 -0
  68. 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
- return {
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;AAE7B,MAAM,8BAA8B,GAAG,CAAC,MAAwC,EAA8B,EAAE;IACrH,OAAO;QACL,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;AACH,CAAC,CAAA;AAZY,QAAA,8BAA8B,kCAY1C;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"}
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.19+17aad525",
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.19+17aad525",
22
- "@sphereon/ssi-sdk.core": "0.30.2-unstable.19+17aad525",
23
- "@sphereon/ssi-types": "0.30.2-unstable.19+17aad525",
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": "17aad525f38b31f85f9fbc1fa1f8370888d9f829"
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
- } from '../types/digitalCredential/digitalCredential'
13
- import { AddCredentialArgs, GetCredentialsArgs, GetCredentialsResponse } from '../types/digitalCredential/IAbstractDigitalCredentialStore'
14
- import { IVerifiablePresentation } from '@sphereon/ssi-types'
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/generic'
7
- import { auditEventEntityFrom, AuditEventEntity } from '../entities/eventLogger/AuditEventEntity'
8
- import { NonPersistedAuditLoggingEvent } from '../types'
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 { ActionType, InitiatorType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
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 { GetAuditEventsArgs, NonPersistedAuditLoggingEvent } from '../types'
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
- if (dc.parentId !== null && dc.parentId !== undefined) {
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 { GetAuditEventsArgs, StoreAuditEventArgs } from '../types'
2
- import { AuditLoggingEvent } from '@sphereon/ssi-sdk.core'
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
  }