@sphereon/ssi-sdk.data-store 0.30.2-feature.SPRIND.61.JARM.pex.fixes.39 → 0.30.2-feature.SPRIND.77.133

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 (132) hide show
  1. package/dist/contact/ContactStore.d.ts.map +1 -1
  2. package/dist/digitalCredential/DigitalCredentialStore.d.ts.map +1 -1
  3. package/dist/digitalCredential/DigitalCredentialStore.js +1 -3
  4. package/dist/digitalCredential/DigitalCredentialStore.js.map +1 -1
  5. package/dist/entities/digitalCredential/DigitalCredentialEntity.d.ts.map +1 -1
  6. package/dist/entities/digitalCredential/DigitalCredentialEntity.js +1 -1
  7. package/dist/entities/digitalCredential/DigitalCredentialEntity.js.map +1 -1
  8. package/dist/entities/eventLogger/AuditEventEntity.d.ts +8 -4
  9. package/dist/entities/eventLogger/AuditEventEntity.d.ts.map +1 -1
  10. package/dist/entities/eventLogger/AuditEventEntity.js +28 -25
  11. package/dist/entities/eventLogger/AuditEventEntity.js.map +1 -1
  12. package/dist/entities/issuanceBranding/BackgroundAttributesEntity.d.ts +0 -2
  13. package/dist/entities/issuanceBranding/BackgroundAttributesEntity.d.ts.map +1 -1
  14. package/dist/entities/issuanceBranding/BackgroundAttributesEntity.js +1 -8
  15. package/dist/entities/issuanceBranding/BackgroundAttributesEntity.js.map +1 -1
  16. package/dist/entities/issuanceBranding/CredentialBrandingEntity.d.ts +0 -2
  17. package/dist/entities/issuanceBranding/CredentialBrandingEntity.d.ts.map +1 -1
  18. package/dist/entities/issuanceBranding/CredentialBrandingEntity.js +1 -9
  19. package/dist/entities/issuanceBranding/CredentialBrandingEntity.js.map +1 -1
  20. package/dist/entities/issuanceBranding/CredentialLocaleBrandingEntity.d.ts +0 -2
  21. package/dist/entities/issuanceBranding/CredentialLocaleBrandingEntity.d.ts.map +1 -1
  22. package/dist/entities/issuanceBranding/CredentialLocaleBrandingEntity.js +1 -16
  23. package/dist/entities/issuanceBranding/CredentialLocaleBrandingEntity.js.map +1 -1
  24. package/dist/entities/issuanceBranding/ImageAttributesEntity.d.ts +0 -2
  25. package/dist/entities/issuanceBranding/ImageAttributesEntity.d.ts.map +1 -1
  26. package/dist/entities/issuanceBranding/ImageAttributesEntity.js +1 -11
  27. package/dist/entities/issuanceBranding/ImageAttributesEntity.js.map +1 -1
  28. package/dist/entities/issuanceBranding/ImageDimensionsEntity.d.ts +0 -2
  29. package/dist/entities/issuanceBranding/ImageDimensionsEntity.d.ts.map +1 -1
  30. package/dist/entities/issuanceBranding/ImageDimensionsEntity.js +1 -8
  31. package/dist/entities/issuanceBranding/ImageDimensionsEntity.js.map +1 -1
  32. package/dist/entities/issuanceBranding/IssuerBrandingEntity.d.ts +0 -2
  33. package/dist/entities/issuanceBranding/IssuerBrandingEntity.d.ts.map +1 -1
  34. package/dist/entities/issuanceBranding/IssuerBrandingEntity.js +1 -8
  35. package/dist/entities/issuanceBranding/IssuerBrandingEntity.js.map +1 -1
  36. package/dist/entities/issuanceBranding/IssuerLocaleBrandingEntity.d.ts +4 -2
  37. package/dist/entities/issuanceBranding/IssuerLocaleBrandingEntity.d.ts.map +1 -1
  38. package/dist/entities/issuanceBranding/IssuerLocaleBrandingEntity.js +21 -15
  39. package/dist/entities/issuanceBranding/IssuerLocaleBrandingEntity.js.map +1 -1
  40. package/dist/entities/issuanceBranding/TextAttributesEntity.d.ts +0 -2
  41. package/dist/entities/issuanceBranding/TextAttributesEntity.d.ts.map +1 -1
  42. package/dist/entities/issuanceBranding/TextAttributesEntity.js +1 -7
  43. package/dist/entities/issuanceBranding/TextAttributesEntity.js.map +1 -1
  44. package/dist/eventLogger/AbstractEventLoggerStore.d.ts +4 -2
  45. package/dist/eventLogger/AbstractEventLoggerStore.d.ts.map +1 -1
  46. package/dist/eventLogger/AbstractEventLoggerStore.js.map +1 -1
  47. package/dist/eventLogger/EventLoggerStore.d.ts +5 -4
  48. package/dist/eventLogger/EventLoggerStore.d.ts.map +1 -1
  49. package/dist/eventLogger/EventLoggerStore.js +35 -8
  50. package/dist/eventLogger/EventLoggerStore.js.map +1 -1
  51. package/dist/index.d.ts +14 -13
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +6 -18
  54. package/dist/index.js.map +1 -1
  55. package/dist/issuanceBranding/IssuanceBrandingStore.d.ts +1 -5
  56. package/dist/issuanceBranding/IssuanceBrandingStore.d.ts.map +1 -1
  57. package/dist/issuanceBranding/IssuanceBrandingStore.js +17 -46
  58. package/dist/issuanceBranding/IssuanceBrandingStore.js.map +1 -1
  59. package/dist/migrations/internal-migrations-ormconfig.d.ts.map +1 -1
  60. package/dist/migrations/postgres/1685628974232-CreateIssuanceBranding.js +1 -1
  61. package/dist/migrations/postgres/1685628974232-CreateIssuanceBranding.js.map +1 -1
  62. package/dist/migrations/postgres/1701634812183-CreateAuditEvents.d.ts.map +1 -1
  63. package/dist/migrations/postgres/1701634812183-CreateAuditEvents.js +34 -6
  64. package/dist/migrations/postgres/1701634812183-CreateAuditEvents.js.map +1 -1
  65. package/dist/migrations/sqlite/1685628973231-CreateIssuanceBranding.js +3 -3
  66. package/dist/migrations/sqlite/1685628973231-CreateIssuanceBranding.js.map +1 -1
  67. package/dist/migrations/sqlite/1701634819487-CreateAuditEvents.d.ts.map +1 -1
  68. package/dist/migrations/sqlite/1701634819487-CreateAuditEvents.js +27 -1
  69. package/dist/migrations/sqlite/1701634819487-CreateAuditEvents.js.map +1 -1
  70. package/dist/presentationDefinition/PDStore.d.ts.map +1 -1
  71. package/dist/types/eventLogger/IAbstractEventLoggerStore.d.ts +9 -2
  72. package/dist/types/eventLogger/IAbstractEventLoggerStore.d.ts.map +1 -1
  73. package/dist/types/eventLogger/eventLogger.d.ts +3 -2
  74. package/dist/types/eventLogger/eventLogger.d.ts.map +1 -1
  75. package/dist/types/issuanceBranding/issuanceBranding.d.ts +7 -2
  76. package/dist/types/issuanceBranding/issuanceBranding.d.ts.map +1 -1
  77. package/dist/utils/FormattingUtils.d.ts +2 -0
  78. package/dist/utils/FormattingUtils.d.ts.map +1 -0
  79. package/dist/utils/FormattingUtils.js +23 -0
  80. package/dist/utils/FormattingUtils.js.map +1 -0
  81. package/dist/utils/SortingUtils.d.ts.map +1 -1
  82. package/dist/utils/contact/MappingUtils.d.ts.map +1 -1
  83. package/dist/utils/contact/MappingUtils.js +27 -14
  84. package/dist/utils/contact/MappingUtils.js.map +1 -1
  85. package/dist/utils/digitalCredential/MappingUtils.d.ts.map +1 -1
  86. package/dist/utils/digitalCredential/MappingUtils.js +7 -5
  87. package/dist/utils/digitalCredential/MappingUtils.js.map +1 -1
  88. package/dist/utils/eventLogger/MappingUtils.d.ts +8 -0
  89. package/dist/utils/eventLogger/MappingUtils.d.ts.map +1 -0
  90. package/dist/utils/eventLogger/MappingUtils.js +70 -0
  91. package/dist/utils/eventLogger/MappingUtils.js.map +1 -0
  92. package/dist/utils/issuanceBranding/MappingUtils.d.ts +22 -0
  93. package/dist/utils/issuanceBranding/MappingUtils.d.ts.map +1 -0
  94. package/dist/utils/issuanceBranding/MappingUtils.js +100 -0
  95. package/dist/utils/issuanceBranding/MappingUtils.js.map +1 -0
  96. package/dist/utils/presentationDefinition/MappingUtils.d.ts.map +1 -1
  97. package/dist/utils/presentationDefinition/MappingUtils.js +5 -3
  98. package/dist/utils/presentationDefinition/MappingUtils.js.map +1 -1
  99. package/package.json +7 -7
  100. package/src/__tests__/digitalCredential.entities.test.ts +5 -5
  101. package/src/__tests__/digitalCredential.store.test.ts +83 -4
  102. package/src/__tests__/eventLogger.entities.test.ts +60 -5
  103. package/src/__tests__/eventLogger.store.test.ts +480 -3
  104. package/src/__tests__/issuanceBranding.entities.test.ts +8 -0
  105. package/src/digitalCredential/DigitalCredentialStore.ts +1 -3
  106. package/src/entities/digitalCredential/DigitalCredentialEntity.ts +1 -1
  107. package/src/entities/eventLogger/AuditEventEntity.ts +23 -28
  108. package/src/entities/issuanceBranding/BackgroundAttributesEntity.ts +2 -11
  109. package/src/entities/issuanceBranding/CredentialBrandingEntity.ts +1 -13
  110. package/src/entities/issuanceBranding/CredentialLocaleBrandingEntity.ts +0 -17
  111. package/src/entities/issuanceBranding/ImageAttributesEntity.ts +2 -14
  112. package/src/entities/issuanceBranding/ImageDimensionsEntity.ts +0 -9
  113. package/src/entities/issuanceBranding/IssuerBrandingEntity.ts +1 -12
  114. package/src/entities/issuanceBranding/IssuerLocaleBrandingEntity.ts +17 -17
  115. package/src/entities/issuanceBranding/TextAttributesEntity.ts +1 -9
  116. package/src/eventLogger/AbstractEventLoggerStore.ts +9 -2
  117. package/src/eventLogger/EventLoggerStore.ts +55 -32
  118. package/src/index.ts +13 -26
  119. package/src/issuanceBranding/IssuanceBrandingStore.ts +26 -68
  120. package/src/migrations/postgres/1685628974232-CreateIssuanceBranding.ts +1 -1
  121. package/src/migrations/postgres/1701634812183-CreateAuditEvents.ts +34 -6
  122. package/src/migrations/sqlite/1685628973231-CreateIssuanceBranding.ts +3 -3
  123. package/src/migrations/sqlite/1701634819487-CreateAuditEvents.ts +27 -1
  124. package/src/types/eventLogger/IAbstractEventLoggerStore.ts +12 -2
  125. package/src/types/eventLogger/eventLogger.ts +3 -2
  126. package/src/types/issuanceBranding/issuanceBranding.ts +9 -3
  127. package/src/utils/FormattingUtils.ts +21 -0
  128. package/src/utils/contact/MappingUtils.ts +39 -13
  129. package/src/utils/digitalCredential/MappingUtils.ts +4 -1
  130. package/src/utils/eventLogger/MappingUtils.ts +116 -0
  131. package/src/utils/issuanceBranding/MappingUtils.ts +135 -0
  132. package/src/utils/presentationDefinition/MappingUtils.ts +4 -1
@@ -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> => {
@@ -83,6 +102,32 @@ describe('Database entities tests', (): void => {
83
102
  const auditEvent2: AuditLoggingEvent = await eventLoggerStore.storeAuditEvent({ event: auditEvent })
84
103
  expect(auditEvent2).toBeDefined()
85
104
 
105
+ const activityEvent: NonPersistedActivityLoggingEvent = {
106
+ timestamp: new Date(),
107
+ level: LogLevel.DEBUG,
108
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
109
+ originalCredential: 'test_credential_string',
110
+ credentialHash: '341a7897df58e472f9bf19b3b9abf7d5',
111
+ credentialType: CredentialType.SD_JWT,
112
+ system: System.GENERAL,
113
+ subSystemType: SubSystem.DID_PROVIDER,
114
+ actionType: ActionType.EXECUTE,
115
+ actionSubType: 'Share credential',
116
+ initiatorType: InitiatorType.EXTERNAL,
117
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
118
+ systemCorrelationId: 'did:example:123456789abcdefghi',
119
+ systemAlias: 'test_alias',
120
+ partyCorrelationType: PartyCorrelationType.DID,
121
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
122
+ partyAlias: 'test_alias',
123
+ description: 'test_description',
124
+ data: 'test_data_string',
125
+ diagnosticData: { data: 'test_data_string' },
126
+ }
127
+
128
+ const storedActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
129
+ expect(storedActivityEvent).toBeDefined()
130
+
86
131
  const result: Array<AuditLoggingEvent> = await eventLoggerStore.getAuditEvents()
87
132
  expect(result.length).toEqual(2)
88
133
  })
@@ -120,6 +165,29 @@ describe('Database entities tests', (): void => {
120
165
  })
121
166
 
122
167
  it('should return no audit events if filter does not match', async (): Promise<void> => {
168
+ const auditEvent: NonPersistedAuditLoggingEvent = {
169
+ timestamp: new Date(),
170
+ level: LogLevel.DEBUG,
171
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
172
+ system: System.GENERAL,
173
+ subSystemType: SubSystem.DID_PROVIDER,
174
+ actionType: ActionType.CREATE,
175
+ actionSubType: 'Key generation',
176
+ initiatorType: InitiatorType.EXTERNAL,
177
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
178
+ systemCorrelationId: 'did:example:123456789abcdefghi',
179
+ systemAlias: 'test_alias',
180
+ partyCorrelationType: PartyCorrelationType.DID,
181
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
182
+ partyAlias: 'test_alias',
183
+ description: 'test_description',
184
+ data: 'test_data_string',
185
+ diagnosticData: { data: 'test_data_string' },
186
+ }
187
+
188
+ const savedAuditEvent: AuditLoggingEvent = await eventLoggerStore.storeAuditEvent({ event: auditEvent })
189
+ expect(savedAuditEvent).toBeDefined()
190
+
123
191
  const args: GetAuditEventsArgs = {
124
192
  filter: [{ correlationId: 'unknown_id' }],
125
193
  }
@@ -127,4 +195,413 @@ describe('Database entities tests', (): void => {
127
195
 
128
196
  expect(result.length).toEqual(0)
129
197
  })
198
+
199
+ it('should store activity event', async (): Promise<void> => {
200
+ const activityEvent: NonPersistedActivityLoggingEvent = {
201
+ timestamp: new Date(),
202
+ level: LogLevel.DEBUG,
203
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
204
+ originalCredential: 'test_credential_string',
205
+ credentialHash: '341a7897df58e472f9bf19b3b9abf7d5',
206
+ credentialType: CredentialType.SD_JWT,
207
+ system: System.GENERAL,
208
+ subSystemType: SubSystem.DID_PROVIDER,
209
+ actionType: ActionType.EXECUTE,
210
+ actionSubType: 'Share credential',
211
+ initiatorType: InitiatorType.EXTERNAL,
212
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
213
+ systemCorrelationId: 'did:example:123456789abcdefghi',
214
+ systemAlias: 'test_alias',
215
+ partyCorrelationType: PartyCorrelationType.DID,
216
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
217
+ partyAlias: 'test_alias',
218
+ description: 'test_description',
219
+ data: 'test_data_string',
220
+ diagnosticData: { data: 'test_data_string' },
221
+ }
222
+
223
+ const savedActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
224
+ expect(savedActivityEvent).toBeDefined()
225
+ expect(savedActivityEvent.type).toEqual(LoggingEventType.ACTIVITY)
226
+ expect(savedActivityEvent.originalCredential).toEqual(activityEvent.originalCredential)
227
+ expect(savedActivityEvent.credentialHash).toEqual(activityEvent.credentialHash)
228
+ expect(savedActivityEvent.credentialType).toEqual(activityEvent.credentialType)
229
+ expect(savedActivityEvent.data).toEqual(activityEvent.data)
230
+ })
231
+
232
+ it('should get all activity events', async (): Promise<void> => {
233
+ const activityEvent: NonPersistedActivityLoggingEvent = {
234
+ timestamp: new Date(),
235
+ level: LogLevel.DEBUG,
236
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
237
+ originalCredential: 'test_credential_string',
238
+ credentialHash: '341a7897df58e472f9bf19b3b9abf7d5',
239
+ credentialType: CredentialType.SD_JWT,
240
+ system: System.GENERAL,
241
+ subSystemType: SubSystem.DID_PROVIDER,
242
+ actionType: ActionType.EXECUTE,
243
+ actionSubType: 'Share credential',
244
+ initiatorType: InitiatorType.EXTERNAL,
245
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
246
+ systemCorrelationId: 'did:example:123456789abcdefghi',
247
+ systemAlias: 'test_alias',
248
+ partyCorrelationType: PartyCorrelationType.DID,
249
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
250
+ partyAlias: 'test_alias',
251
+ description: 'test_description',
252
+ data: 'test_data_string',
253
+ diagnosticData: { data: 'test_data_string' },
254
+ }
255
+
256
+ const activityEvent1: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
257
+ expect(activityEvent1).toBeDefined()
258
+
259
+ const activityEvent2: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
260
+ expect(activityEvent2).toBeDefined()
261
+
262
+ const auditEvent: NonPersistedAuditLoggingEvent = {
263
+ timestamp: new Date(),
264
+ level: LogLevel.DEBUG,
265
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
266
+ system: System.GENERAL,
267
+ subSystemType: SubSystem.DID_PROVIDER,
268
+ actionType: ActionType.CREATE,
269
+ actionSubType: 'Key generation',
270
+ initiatorType: InitiatorType.EXTERNAL,
271
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
272
+ systemCorrelationId: 'did:example:123456789abcdefghi',
273
+ systemAlias: 'test_alias',
274
+ partyCorrelationType: PartyCorrelationType.DID,
275
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
276
+ partyAlias: 'test_alias',
277
+ description: 'test_description',
278
+ data: 'test_data_string',
279
+ diagnosticData: { data: 'test_data_string' },
280
+ }
281
+
282
+ const storedAuditEvent: AuditLoggingEvent = await eventLoggerStore.storeAuditEvent({ event: auditEvent })
283
+ expect(storedAuditEvent).toBeDefined()
284
+
285
+ const result: Array<ActivityLoggingEvent> = await eventLoggerStore.getActivityEvents()
286
+ expect(result.length).toEqual(2)
287
+ })
288
+
289
+ it('should get activity events by filter', async (): Promise<void> => {
290
+ const activityEvent: NonPersistedActivityLoggingEvent = {
291
+ timestamp: new Date(),
292
+ level: LogLevel.DEBUG,
293
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
294
+ originalCredential: 'test_credential_string',
295
+ credentialHash: '341a7897df58e472f9bf19b3b9abf7d5',
296
+ credentialType: CredentialType.SD_JWT,
297
+ system: System.GENERAL,
298
+ subSystemType: SubSystem.DID_PROVIDER,
299
+ actionType: ActionType.EXECUTE,
300
+ actionSubType: 'Share credential',
301
+ initiatorType: InitiatorType.EXTERNAL,
302
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
303
+ systemCorrelationId: 'did:example:123456789abcdefghi',
304
+ systemAlias: 'test_alias',
305
+ partyCorrelationType: PartyCorrelationType.DID,
306
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
307
+ partyAlias: 'test_alias',
308
+ description: 'test_description',
309
+ data: 'test_data_string',
310
+ diagnosticData: { data: 'test_data_string' },
311
+ }
312
+
313
+ const savedActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
314
+ expect(savedActivityEvent).toBeDefined()
315
+
316
+ const args: GetActivityEventsArgs = {
317
+ filter: [{ credentialHash: savedActivityEvent.credentialHash }],
318
+ }
319
+ const result: Array<ActivityLoggingEvent> = await eventLoggerStore.getActivityEvents(args)
320
+
321
+ expect(result.length).toEqual(1)
322
+ })
323
+
324
+ it('should return no audit events if filter does not match', async (): Promise<void> => {
325
+ const activityEvent: NonPersistedActivityLoggingEvent = {
326
+ timestamp: new Date(),
327
+ level: LogLevel.DEBUG,
328
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
329
+ originalCredential: 'test_credential_string',
330
+ credentialHash: '341a7897df58e472f9bf19b3b9abf7d5',
331
+ credentialType: CredentialType.SD_JWT,
332
+ system: System.GENERAL,
333
+ subSystemType: SubSystem.DID_PROVIDER,
334
+ actionType: ActionType.EXECUTE,
335
+ actionSubType: 'Share credential',
336
+ initiatorType: InitiatorType.EXTERNAL,
337
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
338
+ systemCorrelationId: 'did:example:123456789abcdefghi',
339
+ systemAlias: 'test_alias',
340
+ partyCorrelationType: PartyCorrelationType.DID,
341
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
342
+ partyAlias: 'test_alias',
343
+ description: 'test_description',
344
+ data: 'test_data_string',
345
+ diagnosticData: { data: 'test_data_string' },
346
+ }
347
+
348
+ const savedActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: activityEvent })
349
+ expect(savedActivityEvent).toBeDefined()
350
+
351
+ const args: GetActivityEventsArgs = {
352
+ filter: [{ credentialHash: 'unknown_hash' }],
353
+ }
354
+ const result: Array<ActivityLoggingEvent> = await eventLoggerStore.getActivityEvents(args)
355
+
356
+ expect(result.length).toEqual(0)
357
+ })
358
+
359
+ it('should get all activity events for a parent credential', async (): Promise<void> => {
360
+ const parentCredentialHash = 'df7037831edbde7f0f65f723ef5494d6'
361
+
362
+ const parentActivityEvent: NonPersistedActivityLoggingEvent = {
363
+ timestamp: new Date(),
364
+ level: LogLevel.DEBUG,
365
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
366
+ originalCredential: 'test_credential_string',
367
+ credentialHash: parentCredentialHash,
368
+ credentialType: CredentialType.SD_JWT,
369
+ system: System.GENERAL,
370
+ subSystemType: SubSystem.DID_PROVIDER,
371
+ actionType: ActionType.EXECUTE,
372
+ actionSubType: 'Share credential',
373
+ initiatorType: InitiatorType.EXTERNAL,
374
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
375
+ systemCorrelationId: 'did:example:123456789abcdefghi',
376
+ systemAlias: 'test_alias',
377
+ partyCorrelationType: PartyCorrelationType.DID,
378
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
379
+ partyAlias: 'test_alias',
380
+ description: 'test_description',
381
+ data: 'test_data_string',
382
+ diagnosticData: { data: 'test_data_string' },
383
+ }
384
+
385
+ const storedParentActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: parentActivityEvent })
386
+ expect(storedParentActivityEvent).toBeDefined()
387
+
388
+ const childActivityEvent: NonPersistedActivityLoggingEvent = {
389
+ timestamp: new Date(),
390
+ level: LogLevel.DEBUG,
391
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
392
+ originalCredential: 'test_credential_string',
393
+ credentialHash: '341a7897df58e472f9bf19b3b9abf7d5',
394
+ parentCredentialHash,
395
+ credentialType: CredentialType.SD_JWT,
396
+ system: System.GENERAL,
397
+ subSystemType: SubSystem.DID_PROVIDER,
398
+ actionType: ActionType.EXECUTE,
399
+ actionSubType: 'Share credential',
400
+ initiatorType: InitiatorType.EXTERNAL,
401
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
402
+ systemCorrelationId: 'did:example:123456789abcdefghi',
403
+ systemAlias: 'test_alias',
404
+ partyCorrelationType: PartyCorrelationType.DID,
405
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
406
+ partyAlias: 'test_alias',
407
+ description: 'test_description',
408
+ data: 'test_data_string',
409
+ diagnosticData: { data: 'test_data_string' },
410
+ }
411
+
412
+ const storedChildActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: childActivityEvent })
413
+ expect(storedChildActivityEvent).toBeDefined()
414
+
415
+ const otherActivityEvent: NonPersistedActivityLoggingEvent = {
416
+ timestamp: new Date(),
417
+ level: LogLevel.DEBUG,
418
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
419
+ originalCredential: 'test_credential_string',
420
+ credentialHash: 'a8360b0b0b2eed8d185738536ff5b841',
421
+ credentialType: CredentialType.SD_JWT,
422
+ system: System.GENERAL,
423
+ subSystemType: SubSystem.DID_PROVIDER,
424
+ actionType: ActionType.EXECUTE,
425
+ actionSubType: 'Share credential', // TODO
426
+ initiatorType: InitiatorType.EXTERNAL,
427
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
428
+ systemCorrelationId: 'did:example:123456789abcdefghi',
429
+ systemAlias: 'test_alias',
430
+ partyCorrelationType: PartyCorrelationType.DID,
431
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
432
+ partyAlias: 'test_alias',
433
+ description: 'test_description',
434
+ data: 'test_data_string',
435
+ diagnosticData: { data: 'test_data_string' },
436
+ }
437
+
438
+ const storedOtherActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: otherActivityEvent })
439
+ expect(storedOtherActivityEvent).toBeDefined()
440
+
441
+ const receiveActivityEvent: NonPersistedActivityLoggingEvent = {
442
+ timestamp: new Date(),
443
+ level: LogLevel.DEBUG,
444
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
445
+ originalCredential: 'test_credential_string',
446
+ credentialHash: parentCredentialHash,
447
+ credentialType: CredentialType.SD_JWT,
448
+ system: System.GENERAL,
449
+ subSystemType: SubSystem.DID_PROVIDER,
450
+ actionType: ActionType.EXECUTE,
451
+ actionSubType: 'Receive credential',
452
+ initiatorType: InitiatorType.EXTERNAL,
453
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
454
+ systemCorrelationId: 'did:example:123456789abcdefghi',
455
+ systemAlias: 'test_alias',
456
+ partyCorrelationType: PartyCorrelationType.DID,
457
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
458
+ partyAlias: 'test_alias',
459
+ description: 'test_description',
460
+ data: 'test_data_string',
461
+ diagnosticData: { data: 'test_data_string' },
462
+ }
463
+
464
+ const storedReceiveActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: receiveActivityEvent })
465
+ expect(storedReceiveActivityEvent).toBeDefined()
466
+
467
+ const args: GetActivityEventsArgs = {
468
+ filter: [
469
+ {
470
+ credentialHash: parentCredentialHash
471
+ },
472
+ {
473
+ parentCredentialHash
474
+ }
475
+ ]
476
+ }
477
+
478
+ const result: Array<ActivityLoggingEvent> = await eventLoggerStore.getActivityEvents(args)
479
+ expect(result.length).toEqual(3)
480
+ })
481
+
482
+ it('should get all activity events for a parent credential with a certain action', async (): Promise<void> => {
483
+ const parentCredentialHash = 'df7037831edbde7f0f65f723ef5494d6'
484
+
485
+ const parentActivityEvent: NonPersistedActivityLoggingEvent = {
486
+ timestamp: new Date(),
487
+ level: LogLevel.DEBUG,
488
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
489
+ originalCredential: 'test_credential_string',
490
+ credentialHash: parentCredentialHash,
491
+ credentialType: CredentialType.SD_JWT,
492
+ system: System.GENERAL,
493
+ subSystemType: SubSystem.DID_PROVIDER,
494
+ actionType: ActionType.EXECUTE,
495
+ actionSubType: 'Share credential',
496
+ initiatorType: InitiatorType.EXTERNAL,
497
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
498
+ systemCorrelationId: 'did:example:123456789abcdefghi',
499
+ systemAlias: 'test_alias',
500
+ partyCorrelationType: PartyCorrelationType.DID,
501
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
502
+ partyAlias: 'test_alias',
503
+ description: 'test_description',
504
+ data: 'test_data_string',
505
+ diagnosticData: { data: 'test_data_string' },
506
+ }
507
+
508
+ const storedParentActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: parentActivityEvent })
509
+ expect(storedParentActivityEvent).toBeDefined()
510
+
511
+ const childActivityEvent: NonPersistedActivityLoggingEvent = {
512
+ timestamp: new Date(),
513
+ level: LogLevel.DEBUG,
514
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
515
+ originalCredential: 'test_credential_string',
516
+ credentialHash: '341a7897df58e472f9bf19b3b9abf7d5',
517
+ parentCredentialHash,
518
+ credentialType: CredentialType.SD_JWT,
519
+ system: System.GENERAL,
520
+ subSystemType: SubSystem.DID_PROVIDER,
521
+ actionType: ActionType.EXECUTE,
522
+ actionSubType: 'Share credential',
523
+ initiatorType: InitiatorType.EXTERNAL,
524
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
525
+ systemCorrelationId: 'did:example:123456789abcdefghi',
526
+ systemAlias: 'test_alias',
527
+ partyCorrelationType: PartyCorrelationType.DID,
528
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
529
+ partyAlias: 'test_alias',
530
+ description: 'test_description',
531
+ data: 'test_data_string',
532
+ diagnosticData: { data: 'test_data_string' },
533
+ }
534
+
535
+ const storedChildActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: childActivityEvent })
536
+ expect(storedChildActivityEvent).toBeDefined()
537
+
538
+ const otherActivityEvent: NonPersistedActivityLoggingEvent = {
539
+ timestamp: new Date(),
540
+ level: LogLevel.DEBUG,
541
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
542
+ originalCredential: 'test_credential_string',
543
+ credentialHash: 'a8360b0b0b2eed8d185738536ff5b841',
544
+ credentialType: CredentialType.SD_JWT,
545
+ system: System.GENERAL,
546
+ subSystemType: SubSystem.DID_PROVIDER,
547
+ actionType: ActionType.EXECUTE,
548
+ actionSubType: 'Share credential', // TODO
549
+ initiatorType: InitiatorType.EXTERNAL,
550
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
551
+ systemCorrelationId: 'did:example:123456789abcdefghi',
552
+ systemAlias: 'test_alias',
553
+ partyCorrelationType: PartyCorrelationType.DID,
554
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
555
+ partyAlias: 'test_alias',
556
+ description: 'test_description',
557
+ data: 'test_data_string',
558
+ diagnosticData: { data: 'test_data_string' },
559
+ }
560
+
561
+ const storedOtherActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: otherActivityEvent })
562
+ expect(storedOtherActivityEvent).toBeDefined()
563
+
564
+ const receiveActivityEvent: NonPersistedActivityLoggingEvent = {
565
+ timestamp: new Date(),
566
+ level: LogLevel.DEBUG,
567
+ correlationId: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
568
+ originalCredential: 'test_credential_string',
569
+ credentialHash: parentCredentialHash,
570
+ credentialType: CredentialType.SD_JWT,
571
+ system: System.GENERAL,
572
+ subSystemType: SubSystem.DID_PROVIDER,
573
+ actionType: ActionType.EXECUTE,
574
+ actionSubType: 'Receive credential',
575
+ initiatorType: InitiatorType.EXTERNAL,
576
+ systemCorrelationIdType: SystemCorrelationIdType.DID,
577
+ systemCorrelationId: 'did:example:123456789abcdefghi',
578
+ systemAlias: 'test_alias',
579
+ partyCorrelationType: PartyCorrelationType.DID,
580
+ partyCorrelationId: '75cfd84a-0f3b-4fb1-97a3-a1506c7ab850',
581
+ partyAlias: 'test_alias',
582
+ description: 'test_description',
583
+ data: 'test_data_string',
584
+ diagnosticData: { data: 'test_data_string' },
585
+ }
586
+
587
+ const storedReceiveActivityEvent: ActivityLoggingEvent = await eventLoggerStore.storeActivityEvent({ event: receiveActivityEvent })
588
+ expect(storedReceiveActivityEvent).toBeDefined()
589
+
590
+ const args: GetActivityEventsArgs = {
591
+ filter: [
592
+ {
593
+ credentialHash: parentCredentialHash,
594
+ actionSubType: 'Share credential'
595
+ },
596
+ {
597
+ parentCredentialHash,
598
+ actionSubType: 'Share credential'
599
+ }
600
+ ]
601
+ }
602
+
603
+ const result: Array<ActivityLoggingEvent> = await eventLoggerStore.getActivityEvents(args)
604
+ expect(result.length).toEqual(2)
605
+ })
606
+
130
607
  })
@@ -468,6 +468,10 @@ describe('Database entities tests', (): void => {
468
468
  localeBranding: [
469
469
  {
470
470
  alias: 'issuerAlias',
471
+ clientUri: 'test_uri',
472
+ tosUri: 'test_uri',
473
+ policyUri: 'test_uri',
474
+ contacts: ['test_email_address1', 'test_email_address2'],
471
475
  locale: 'en-US',
472
476
  logo: {
473
477
  uri: 'data:image/jpeg;base64,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',
@@ -507,6 +511,10 @@ describe('Database entities tests', (): void => {
507
511
  expect(fromDb?.localeBranding).toBeDefined()
508
512
  expect(fromDb?.localeBranding.length).toEqual(1)
509
513
  expect(fromDb?.localeBranding[0].alias).toEqual(issuerBranding.localeBranding[0].alias)
514
+ expect(fromDb?.localeBranding[0].clientUri).toEqual(issuerBranding.localeBranding[0].clientUri)
515
+ expect(fromDb?.localeBranding[0].tosUri).toEqual(issuerBranding.localeBranding[0].tosUri)
516
+ expect(fromDb?.localeBranding[0].policyUri).toEqual(issuerBranding.localeBranding[0].policyUri)
517
+ expect(fromDb?.localeBranding[0].contacts).toEqual(issuerBranding.localeBranding[0].contacts)
510
518
  expect(fromDb?.localeBranding[0].locale).toEqual(issuerBranding.localeBranding[0].locale)
511
519
  expect(fromDb?.localeBranding[0].description).toEqual(issuerBranding.localeBranding[0].description)
512
520
  expect(fromDb?.localeBranding[0].logo).toBeDefined()
@@ -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,3 +1,4 @@
1
+ import { typeormDate, typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'
1
2
  import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'
2
3
  import {
3
4
  CredentialCorrelationType,
@@ -8,7 +9,6 @@ import {
8
9
  DocumentType,
9
10
  RegulationType,
10
11
  } from '../../types'
11
- import { typeormDate, typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'
12
12
 
13
13
  @Entity('DigitalCredential')
14
14
  export class DigitalCredentialEntity extends BaseEntity implements DigitalCredential {
@@ -1,9 +1,10 @@
1
- import { ActionSubType, ActionType, InitiatorType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
2
- import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'
3
- import { PartyCorrelationType } from '@sphereon/ssi-sdk.core'
4
- import { NonPersistedAuditLoggingEvent } from '../../types'
1
+ import { ActionSubType, ActionType, InitiatorType, LoggingEventType, LogLevel, SubSystem, System, SystemCorrelationIdType } from '@sphereon/ssi-types'
2
+ import { CredentialType, PartyCorrelationType } from '@sphereon/ssi-sdk.core'
5
3
  import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'
4
+ import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'
6
5
 
6
+ //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.
7
+ // 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
8
  @Entity('AuditEvents')
8
9
  export class AuditEventEntity extends BaseEntity {
9
10
  @PrimaryGeneratedColumn('uuid')
@@ -12,6 +13,9 @@ export class AuditEventEntity extends BaseEntity {
12
13
  @Column({ name: 'timestamp', nullable: false, unique: false, type: typeOrmDateTime() })
13
14
  timestamp!: Date
14
15
 
16
+ @Column('simple-enum', { name: 'eventType', enum: LoggingEventType, nullable: false, unique: false })
17
+ type!: LoggingEventType
18
+
15
19
  @Column('simple-enum', { name: 'level', enum: LogLevel, nullable: false, unique: false })
16
20
  level!: LogLevel
17
21
 
@@ -54,6 +58,21 @@ export class AuditEventEntity extends BaseEntity {
54
58
  @Column('text', { name: 'description', nullable: false, unique: false })
55
59
  description!: string
56
60
 
61
+ @Column('simple-enum', { name: 'credentialType', enum: CredentialType, nullable: true, unique: false })
62
+ credentialType?: CredentialType
63
+
64
+ @Column('text', { name: 'credentialHash', nullable: true, unique: false })
65
+ credentialHash?: string
66
+
67
+ @Column('text', { name: 'parentCredentialHash', nullable: true, unique: false })
68
+ parentCredentialHash?: string
69
+
70
+ @Column('text', { name: 'originalCredential', nullable: true, unique: false })
71
+ originalCredential?: string
72
+
73
+ @Column('text', { name: 'sharePurpose', nullable: true, unique: false })
74
+ sharePurpose?: string
75
+
57
76
  @Column('text', { name: 'data', nullable: true, unique: false })
58
77
  data?: string
59
78
 
@@ -66,27 +85,3 @@ export class AuditEventEntity extends BaseEntity {
66
85
  @UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })
67
86
  lastUpdatedAt!: Date
68
87
  }
69
-
70
- export const auditEventEntityFrom = (args: NonPersistedAuditLoggingEvent): AuditEventEntity => {
71
- const auditEventEntity: AuditEventEntity = new AuditEventEntity()
72
- auditEventEntity.timestamp = args.timestamp
73
- auditEventEntity.level = args.level
74
- auditEventEntity.correlationId = args.correlationId
75
- auditEventEntity.system = args.system
76
- auditEventEntity.subSystemType = args.subSystemType
77
- auditEventEntity.actionType = args.actionType
78
- auditEventEntity.actionSubType = args.actionSubType
79
- auditEventEntity.initiatorType = args.initiatorType
80
- auditEventEntity.systemCorrelationIdType = args.systemCorrelationIdType
81
- auditEventEntity.systemCorrelationId = args.systemCorrelationId
82
- auditEventEntity.systemAlias = args.systemAlias
83
- auditEventEntity.partyCorrelationType = args.partyCorrelationType
84
- auditEventEntity.partyCorrelationId = args.partyCorrelationId
85
- auditEventEntity.partyAlias = args.partyAlias
86
- auditEventEntity.description = args.description
87
- auditEventEntity.partyCorrelationType = args.partyCorrelationType
88
- auditEventEntity.data = JSON.stringify(args.data)
89
- auditEventEntity.diagnosticData = JSON.stringify(args.diagnosticData)
90
-
91
- return auditEventEntity
92
- }