@sphereon/ssi-sdk.data-store 0.34.1-feature.SSISDK.26.RP.58 → 0.34.1-feature.SSISDK.45.189

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 (36) hide show
  1. package/dist/index.cjs +1616 -1477
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +187 -194
  4. package/dist/index.d.ts +187 -194
  5. package/dist/index.js +1582 -1443
  6. package/dist/index.js.map +1 -1
  7. package/package.json +8 -8
  8. package/src/__tests__/contact.entities.test.ts +2 -2
  9. package/src/__tests__/contact.store.test.ts +1 -1
  10. package/src/__tests__/digitalCredential.entities.test.ts +2 -1
  11. package/src/__tests__/digitalCredential.store.test.ts +5 -5
  12. package/src/__tests__/pd-manager.entities.test.ts +27 -98
  13. package/src/__tests__/pd-manager.store.test.ts +151 -101
  14. package/src/digitalCredential/DigitalCredentialStore.ts +9 -9
  15. package/src/entities/contact/IdentityEntity.ts +2 -1
  16. package/src/entities/digitalCredential/DigitalCredentialEntity.ts +2 -1
  17. package/src/entities/presentationDefinition/{PresentationDefinitionItemEntity.ts → DcqlQueryItemEntity.ts} +8 -12
  18. package/src/index.ts +3 -3
  19. package/src/migrations/generic/12-CreateBitstringStatusList.ts +32 -2
  20. package/src/migrations/generic/13-CreateDcqlQueryItem.ts +67 -0
  21. package/src/migrations/generic/index.ts +10 -5
  22. package/src/migrations/postgres/1716475165345-CreatePresentationDefinitions.ts +1 -1
  23. package/src/migrations/postgres/1726588800000-CreateDcqlQueryItem.ts +25 -0
  24. package/src/migrations/postgres/1737110469001-UpdateStatusList.ts +1 -1
  25. package/src/migrations/postgres/1741895823000-CreateBitstringStatusList.ts +15 -2
  26. package/src/migrations/sqlite/1716475165344-CreatePresentationDefinitions.ts +1 -1
  27. package/src/migrations/sqlite/1726617600000-CreateDcqlQueryItem.ts +24 -0
  28. package/src/presentationDefinition/AbstractPDStore.ts +5 -5
  29. package/src/presentationDefinition/PDStore.ts +40 -40
  30. package/src/types/contact/contact.ts +1 -1
  31. package/src/types/digitalCredential/IAbstractDigitalCredentialStore.ts +2 -1
  32. package/src/types/digitalCredential/enums.ts +0 -7
  33. package/src/types/digitalCredential/types.ts +2 -1
  34. package/src/types/presentationDefinition/IAbstractPDStore.ts +5 -5
  35. package/src/types/presentationDefinition/presentationDefinition.ts +8 -9
  36. package/src/utils/presentationDefinition/MappingUtils.ts +31 -22
@@ -1,19 +1,18 @@
1
- import { IPresentationDefinition } from '@sphereon/pex'
2
- import { DcqlQueryREST } from '@sphereon/ssi-types'
1
+ import { DcqlQuery } from 'dcql'
3
2
 
4
- export type PresentationDefinitionItem = {
3
+ export type DcqlQueryItem = {
5
4
  id: string
6
- definitionId: string
5
+ queryId: string
7
6
  tenantId?: string
8
7
  version: string
9
8
  name?: string
10
9
  purpose?: string
11
- definitionPayload: IPresentationDefinition
12
- dcqlPayload?: DcqlQueryREST
10
+ query: DcqlQuery
13
11
  createdAt: Date
14
12
  lastUpdatedAt: Date
15
13
  }
16
14
 
17
- export type NonPersistedPresentationDefinitionItem = Omit<PresentationDefinitionItem, 'id' | 'createdAt' | 'lastUpdatedAt'>
18
- export type PartialPresentationDefinitionItem = Partial<PresentationDefinitionItem>
19
- export type PresentationDefinitionItemFilter = Partial<Omit<PresentationDefinitionItem, 'definitionPayload' | 'dcqlPayload'>>
15
+ export type ImportDcqlQueryItem = Omit<DcqlQueryItem, 'id' | 'tenantId' | 'version' | 'createdAt' | 'lastUpdatedAt'>
16
+ export type NonPersistedDcqlQueryItem = Omit<DcqlQueryItem, 'id' | 'createdAt' | 'lastUpdatedAt'>
17
+ export type PartialDcqlQueryItem = Partial<DcqlQueryItem>
18
+ export type DcqlQueryItemFilter = Partial<Omit<DcqlQueryItem, 'query'>>
@@ -1,58 +1,67 @@
1
- import { PresentationDefinitionItemEntity } from '../../entities/presentationDefinition/PresentationDefinitionItemEntity'
2
1
  import type { IPresentationDefinition } from '@sphereon/pex'
3
- import type { NonPersistedPresentationDefinitionItem, PartialPresentationDefinitionItem, PresentationDefinitionItem } from '../../types'
4
2
  import * as blakepkg from 'blakejs'
3
+ import { DcqlQuery } from 'dcql'
4
+ import { DcqlQueryItemEntity } from '../../entities/presentationDefinition/DcqlQueryItemEntity'
5
+ import type { NonPersistedDcqlQueryItem, PartialDcqlQueryItem, DcqlQueryItem } from '../../types'
5
6
  import { replaceNullWithUndefined } from '../FormattingUtils'
6
- import type { DcqlQueryREST } from '@sphereon/ssi-types'
7
7
 
8
- export const presentationDefinitionItemFrom = (entity: PresentationDefinitionItemEntity): PresentationDefinitionItem => {
9
- const result: PresentationDefinitionItem = {
8
+ export const dcqlQueryItemFrom = (entity: DcqlQueryItemEntity): DcqlQueryItem => {
9
+ const result: DcqlQueryItem = {
10
10
  id: entity.id,
11
11
  tenantId: entity.tenantId,
12
- definitionId: entity.definitionId,
12
+ queryId: entity.queryId,
13
13
  version: entity.version,
14
14
  name: entity.name,
15
15
  purpose: entity.purpose,
16
- definitionPayload: JSON.parse(entity.definitionPayload) as IPresentationDefinition,
17
- dcqlPayload: JSON.parse(entity.dcqlPayload) as DcqlQueryREST,
16
+ query: DcqlQuery.parse(JSON.parse(entity.query)),
18
17
  createdAt: entity.createdAt,
19
18
  lastUpdatedAt: entity.lastUpdatedAt,
20
19
  }
21
20
 
21
+ if (result.query) {
22
+ DcqlQuery.validate(result.query)
23
+ }
22
24
  return replaceNullWithUndefined(result)
23
25
  }
24
26
 
25
- export const presentationDefinitionEntityItemFrom = (item: NonPersistedPresentationDefinitionItem): PresentationDefinitionItemEntity => {
26
- const entity = new PresentationDefinitionItemEntity()
27
+ export const dcqlQueryEntityItemFrom = (item: NonPersistedDcqlQueryItem): DcqlQueryItemEntity => {
28
+ const entity = new DcqlQueryItemEntity()
27
29
 
28
30
  entity.tenantId = item.tenantId
29
- entity.definitionId = item.definitionId!
31
+ entity.queryId = item.queryId!
30
32
  entity.version = item.version
31
33
  entity.name = item.name
32
34
  entity.purpose = item.purpose
33
- entity.definitionPayload = JSON.stringify(item.definitionPayload!)
34
- entity.dcqlPayload = JSON.stringify(item.dcqlPayload!)
35
+ if (item.query) {
36
+ const dcqlQuery = DcqlQuery.parse(item.query)
37
+ DcqlQuery.validate(dcqlQuery)
38
+ entity.query = JSON.stringify(item.query)
39
+ }
35
40
  return entity
36
41
  }
37
42
 
38
- function hashPayload(payload: IPresentationDefinition): string {
43
+ function hashPayload(payload: IPresentationDefinition | DcqlQuery): string {
39
44
  return blakepkg.blake2bHex(JSON.stringify(payload))
40
45
  }
41
46
 
42
- export function isPresentationDefinitionEqual(base: PartialPresentationDefinitionItem, compare: PartialPresentationDefinitionItem): boolean {
47
+ export function isPresentationDefinitionEqual(base: PartialDcqlQueryItem, compare: PartialDcqlQueryItem): boolean {
43
48
  if (
44
- base.definitionId !== compare.definitionId ||
45
- base.tenantId != compare.tenantId ||
49
+ base.queryId !== compare.queryId ||
50
+ base.tenantId !== compare.tenantId ||
46
51
  base.version !== compare.version ||
47
- base.name != compare.name ||
48
- base.purpose != compare.purpose
52
+ base.name !== compare.name ||
53
+ base.purpose !== compare.purpose
49
54
  ) {
50
55
  return false
51
56
  }
52
57
 
53
- if (base.definitionPayload && compare.definitionPayload) {
54
- return hashPayload(base.definitionPayload) === hashPayload(compare.definitionPayload)
58
+ if (base.query && compare.query) {
59
+ if (hashPayload(base.query) !== hashPayload(compare.query)) {
60
+ return false
61
+ }
62
+ } else if (base.query || compare.query) {
63
+ return false
55
64
  }
56
65
 
57
- return false
66
+ return true
58
67
  }