@sphereon/ssi-sdk.data-store 0.34.1-feature.SSISDK.45.94 → 0.34.1-feature.SSISDK.46.151

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.
@@ -1,9 +1,10 @@
1
+ import { DcqlQueryPayload } from '@sphereon/ssi-types'
2
+ import { DcqlQuery } from 'dcql'
1
3
  import { PresentationDefinitionItemEntity } from '../../entities/presentationDefinition/PresentationDefinitionItemEntity'
2
4
  import type { IPresentationDefinition } from '@sphereon/pex'
3
5
  import type { NonPersistedPresentationDefinitionItem, PartialPresentationDefinitionItem, PresentationDefinitionItem } from '../../types'
4
6
  import * as blakepkg from 'blakejs'
5
7
  import { replaceNullWithUndefined } from '../FormattingUtils'
6
- import type { DcqlQueryREST } from '@sphereon/ssi-types'
7
8
 
8
9
  export const presentationDefinitionItemFrom = (entity: PresentationDefinitionItemEntity): PresentationDefinitionItem => {
9
10
  const result: PresentationDefinitionItem = {
@@ -14,11 +15,21 @@ export const presentationDefinitionItemFrom = (entity: PresentationDefinitionIte
14
15
  name: entity.name,
15
16
  purpose: entity.purpose,
16
17
  definitionPayload: JSON.parse(entity.definitionPayload) as IPresentationDefinition,
17
- dcqlPayload: JSON.parse(entity.dcqlPayload) as DcqlQueryREST,
18
+ ...(entity.dcqlPayload && {
19
+ dcqlPayload: {
20
+ queryId: entity.definitionId,
21
+ name: entity.name,
22
+ defaultPurpose: entity.purpose,
23
+ dcqlQuery: DcqlQuery.parse(JSON.parse(entity.dcqlPayload)),
24
+ },
25
+ }),
18
26
  createdAt: entity.createdAt,
19
27
  lastUpdatedAt: entity.lastUpdatedAt,
20
28
  }
21
29
 
30
+ if (result.dcqlPayload?.dcqlQuery) {
31
+ DcqlQuery.validate(result.dcqlPayload?.dcqlQuery)
32
+ }
22
33
  return replaceNullWithUndefined(result)
23
34
  }
24
35
 
@@ -30,29 +41,47 @@ export const presentationDefinitionEntityItemFrom = (item: NonPersistedPresentat
30
41
  entity.version = item.version
31
42
  entity.name = item.name
32
43
  entity.purpose = item.purpose
33
- entity.definitionPayload = JSON.stringify(item.definitionPayload!)
34
- entity.dcqlPayload = JSON.stringify(item.dcqlPayload!)
44
+ if (item.definitionPayload) {
45
+ entity.definitionPayload = JSON.stringify(item.definitionPayload)
46
+ }
47
+ if (item.dcqlPayload) {
48
+ const dcqlQuery = DcqlQuery.parse(item.dcqlPayload.dcqlQuery)
49
+ DcqlQuery.validate(dcqlQuery)
50
+ entity.dcqlPayload = JSON.stringify(item.dcqlPayload.dcqlQuery)
51
+ }
35
52
  return entity
36
53
  }
37
54
 
38
- function hashPayload(payload: IPresentationDefinition): string {
55
+ function hashPayload(payload: IPresentationDefinition | DcqlQueryPayload): string {
39
56
  return blakepkg.blake2bHex(JSON.stringify(payload))
40
57
  }
41
58
 
42
59
  export function isPresentationDefinitionEqual(base: PartialPresentationDefinitionItem, compare: PartialPresentationDefinitionItem): boolean {
43
60
  if (
44
61
  base.definitionId !== compare.definitionId ||
45
- base.tenantId != compare.tenantId ||
62
+ base.tenantId !== compare.tenantId ||
46
63
  base.version !== compare.version ||
47
- base.name != compare.name ||
48
- base.purpose != compare.purpose
64
+ base.name !== compare.name ||
65
+ base.purpose !== compare.purpose
49
66
  ) {
50
67
  return false
51
68
  }
52
69
 
70
+ if (base.dcqlPayload && compare.dcqlPayload) {
71
+ if (hashPayload(base.dcqlPayload) !== hashPayload(compare.dcqlPayload)) {
72
+ return false
73
+ }
74
+ } else if (base.dcqlPayload || compare.dcqlPayload) {
75
+ return false
76
+ }
77
+
53
78
  if (base.definitionPayload && compare.definitionPayload) {
54
- return hashPayload(base.definitionPayload) === hashPayload(compare.definitionPayload)
79
+ if (hashPayload(base.definitionPayload) !== hashPayload(compare.definitionPayload)) {
80
+ return false
81
+ }
82
+ } else if (base.definitionPayload || compare.definitionPayload) {
83
+ return false
55
84
  }
56
85
 
57
- return false
86
+ return true
58
87
  }