@sphereon/ssi-sdk.data-store 0.30.1-unstable.4 → 0.30.1

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 (136) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +77 -77
  3. package/dist/contact/ContactStore.d.ts.map +1 -1
  4. package/dist/digitalCredential/DigitalCredentialStore.d.ts.map +1 -1
  5. package/dist/eventLogger/EventLoggerStore.d.ts.map +1 -1
  6. package/dist/issuanceBranding/IssuanceBrandingStore.d.ts.map +1 -1
  7. package/dist/migrations/internal-migrations-ormconfig.d.ts.map +1 -1
  8. package/dist/migrations/postgres/1708525189001-CreateDigitalCredential.js +33 -33
  9. package/dist/migrations/postgres/1708797018115-CreateMachineStateStore.js +16 -16
  10. package/dist/migrations/postgres/1715761125001-CreateContacts.js +33 -33
  11. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.js +12 -12
  12. package/dist/migrations/sqlite/1708525189002-CreateDigitalCredential.js +32 -32
  13. package/dist/migrations/sqlite/1708796002272-CreateMachineStateStore.js +15 -15
  14. package/dist/migrations/sqlite/1710438363002-CreateContacts.js +13 -13
  15. package/dist/migrations/sqlite/1715761125002-CreateContacts.js +32 -32
  16. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.js +9 -9
  17. package/dist/presentationDefinition/PDStore.d.ts.map +1 -1
  18. package/dist/utils/SortingUtils.d.ts.map +1 -1
  19. package/dist/utils/contact/MappingUtils.d.ts.map +1 -1
  20. package/dist/utils/digitalCredential/MappingUtils.d.ts.map +1 -1
  21. package/dist/utils/digitalCredential/MappingUtils.js +4 -4
  22. package/dist/utils/digitalCredential/MappingUtils.js.map +1 -1
  23. package/dist/utils/presentationDefinition/MappingUtils.js +2 -2
  24. package/dist/utils/presentationDefinition/MappingUtils.js.map +1 -1
  25. package/package.json +8 -8
  26. package/src/__tests__/contact.entities.test.ts +2642 -2642
  27. package/src/__tests__/contact.store.test.ts +2649 -2649
  28. package/src/__tests__/digitalCredential.entities.test.ts +274 -274
  29. package/src/__tests__/digitalCredential.store.test.ts +330 -330
  30. package/src/__tests__/eventLogger.entities.test.ts +76 -76
  31. package/src/__tests__/eventLogger.store.test.ts +130 -130
  32. package/src/__tests__/issuanceBranding.entities.test.ts +846 -846
  33. package/src/__tests__/issuanceBranding.store.test.ts +1886 -1886
  34. package/src/__tests__/machineState.entities.test.ts +53 -53
  35. package/src/__tests__/machineState.store.test.ts +176 -176
  36. package/src/__tests__/pd-manager.entities.test.ts +73 -73
  37. package/src/__tests__/pd-manager.store.test.ts +193 -193
  38. package/src/contact/AbstractContactStore.ts +71 -71
  39. package/src/contact/ContactStore.ts +768 -768
  40. package/src/digitalCredential/AbstractDigitalCredentialStore.ts +21 -21
  41. package/src/digitalCredential/DigitalCredentialStore.ts +189 -189
  42. package/src/entities/contact/BaseContactEntity.ts +51 -51
  43. package/src/entities/contact/ConnectionEntity.ts +35 -35
  44. package/src/entities/contact/ContactMetadataItemEntity.ts +51 -51
  45. package/src/entities/contact/CorrelationIdentifierEntity.ts +43 -43
  46. package/src/entities/contact/DidAuthConfigEntity.ts +20 -20
  47. package/src/entities/contact/ElectronicAddressEntity.ts +70 -70
  48. package/src/entities/contact/IdentityEntity.ts +107 -107
  49. package/src/entities/contact/IdentityMetadataItemEntity.ts +48 -48
  50. package/src/entities/contact/NaturalPersonEntity.ts +44 -44
  51. package/src/entities/contact/OpenIdConfigEntity.ts +32 -32
  52. package/src/entities/contact/OrganizationEntity.ts +35 -35
  53. package/src/entities/contact/PartyEntity.ts +117 -117
  54. package/src/entities/contact/PartyRelationshipEntity.ts +68 -68
  55. package/src/entities/contact/PartyTypeEntity.ts +63 -63
  56. package/src/entities/contact/PhysicalAddressEntity.ts +95 -95
  57. package/src/entities/digitalCredential/DigitalCredentialEntity.ts +98 -98
  58. package/src/entities/eventLogger/AuditEventEntity.ts +92 -92
  59. package/src/entities/issuanceBranding/BackgroundAttributesEntity.ts +42 -42
  60. package/src/entities/issuanceBranding/BaseLocaleBrandingEntity.ts +87 -87
  61. package/src/entities/issuanceBranding/CredentialBrandingEntity.ts +79 -79
  62. package/src/entities/issuanceBranding/CredentialLocaleBrandingEntity.ts +33 -33
  63. package/src/entities/issuanceBranding/ImageAttributesEntity.ts +57 -57
  64. package/src/entities/issuanceBranding/ImageDimensionsEntity.ts +22 -22
  65. package/src/entities/issuanceBranding/IssuerBrandingEntity.ts +73 -73
  66. package/src/entities/issuanceBranding/IssuerLocaleBrandingEntity.ts +33 -33
  67. package/src/entities/issuanceBranding/TextAttributesEntity.ts +31 -31
  68. package/src/entities/machineState/MachineStateInfoEntity.ts +59 -59
  69. package/src/entities/presentationDefinition/PresentationDefinitionItemEntity.ts +44 -44
  70. package/src/entities/statusList2021/StatusList2021Entity.ts +96 -96
  71. package/src/entities/statusList2021/StatusList2021EntryEntity.ts +29 -29
  72. package/src/eventLogger/AbstractEventLoggerStore.ts +7 -7
  73. package/src/eventLogger/EventLoggerStore.ts +62 -62
  74. package/src/index.ts +160 -160
  75. package/src/issuanceBranding/IssuanceBrandingStore.ts +559 -559
  76. package/src/machineState/IAbstractMachineStateStore.ts +65 -65
  77. package/src/machineState/MachineStateStore.ts +149 -149
  78. package/src/migrations/generic/1-CreateContacts.ts +66 -66
  79. package/src/migrations/generic/10-CreatePresentationDefinitions.ts +66 -66
  80. package/src/migrations/generic/2-CreateIssuanceBranding.ts +64 -64
  81. package/src/migrations/generic/3-CreateContacts.ts +66 -66
  82. package/src/migrations/generic/4-CreateStatusList.ts +54 -54
  83. package/src/migrations/generic/5-CreateAuditEvents.ts +66 -66
  84. package/src/migrations/generic/6-CreateDigitalCredential.ts +66 -66
  85. package/src/migrations/generic/7-CreateMachineStateStore.ts +66 -66
  86. package/src/migrations/generic/8-CreateContacts.ts +66 -66
  87. package/src/migrations/generic/9-CreateContacts.ts +66 -66
  88. package/src/migrations/generic/index.ts +43 -43
  89. package/src/migrations/index.ts +10 -10
  90. package/src/migrations/postgres/1659463079428-CreateContacts.ts +63 -63
  91. package/src/migrations/postgres/1685628974232-CreateIssuanceBranding.ts +85 -85
  92. package/src/migrations/postgres/1690925872592-CreateContacts.ts +158 -158
  93. package/src/migrations/postgres/1693866470001-CreateStatusList.ts +24 -24
  94. package/src/migrations/postgres/1701634812183-CreateAuditEvents.ts +33 -33
  95. package/src/migrations/postgres/1708525189001-CreateDigitalCredential.ts +61 -61
  96. package/src/migrations/postgres/1708797018115-CreateMachineStateStore.ts +29 -29
  97. package/src/migrations/postgres/1710438363001-CreateContacts.ts +63 -63
  98. package/src/migrations/postgres/1715761125001-CreateContacts.ts +60 -60
  99. package/src/migrations/postgres/1716475165345-CreatePresentationDefinitions.ts +25 -25
  100. package/src/migrations/sqlite/1659463069549-CreateContacts.ts +110 -110
  101. package/src/migrations/sqlite/1685628973231-CreateIssuanceBranding.ts +119 -119
  102. package/src/migrations/sqlite/1690925872693-CreateContacts.ts +228 -228
  103. package/src/migrations/sqlite/1693866470000-CreateStatusList.ts +24 -24
  104. package/src/migrations/sqlite/1701634819487-CreateAuditEvents.ts +15 -15
  105. package/src/migrations/sqlite/1708525189002-CreateDigitalCredential.ts +46 -46
  106. package/src/migrations/sqlite/1708796002272-CreateMachineStateStore.ts +28 -28
  107. package/src/migrations/sqlite/1710438363002-CreateContacts.ts +83 -83
  108. package/src/migrations/sqlite/1715761125002-CreateContacts.ts +59 -59
  109. package/src/migrations/sqlite/1716475165344-CreatePresentationDefinitions.ts +24 -24
  110. package/src/presentationDefinition/AbstractPDStore.ts +20 -20
  111. package/src/presentationDefinition/PDStore.ts +185 -185
  112. package/src/statusList/IStatusListStore.ts +44 -44
  113. package/src/statusList/StatusListStore.ts +236 -236
  114. package/src/types/contact/IAbstractContactStore.ts +161 -161
  115. package/src/types/contact/contact.ts +295 -295
  116. package/src/types/digitalCredential/IAbstractDigitalCredentialStore.ts +42 -42
  117. package/src/types/digitalCredential/digitalCredential.ts +102 -102
  118. package/src/types/eventLogger/IAbstractEventLoggerStore.ts +12 -12
  119. package/src/types/eventLogger/eventLogger.ts +3 -3
  120. package/src/types/index.ts +14 -14
  121. package/src/types/machineState/IAbstractMachineStateStore.ts +68 -68
  122. package/src/types/presentationDefinition/IAbstractPDStore.ts +25 -25
  123. package/src/types/presentationDefinition/presentationDefinition.ts +17 -17
  124. package/src/utils/SortingUtils.ts +16 -16
  125. package/src/utils/contact/MappingUtils.ts +506 -506
  126. package/src/utils/digitalCredential/MappingUtils.ts +160 -160
  127. package/src/utils/hasher.ts +19 -19
  128. package/src/utils/presentationDefinition/MappingUtils.ts +52 -52
  129. package/dist/entities/contact/IMetadataEntity.d.ts +0 -8
  130. package/dist/entities/contact/IMetadataEntity.d.ts.map +0 -1
  131. package/dist/entities/contact/IMetadataEntity.js +0 -2
  132. package/dist/entities/contact/IMetadataEntity.js.map +0 -1
  133. package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts +0 -7
  134. package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts.map +0 -1
  135. package/dist/migrations/generic/8-CreatePresentationDefinitions.js +0 -78
  136. package/dist/migrations/generic/8-CreatePresentationDefinitions.js.map +0 -1
@@ -1,274 +1,274 @@
1
- import { DataSources } from '@sphereon/ssi-sdk.agent-config'
2
- import { DataSource } from 'typeorm'
3
- import { CredentialRole, DataStoreDigitalCredentialEntities } from '../index'
4
- import { DataStoreDigitalCredentialMigrations } from '../migrations'
5
- import { DigitalCredentialEntity } from '../entities/digitalCredential/DigitalCredentialEntity'
6
- import {
7
- CredentialCorrelationType,
8
- CredentialDocumentFormat,
9
- DocumentType,
10
- NonPersistedDigitalCredential,
11
- } from '../types/digitalCredential/digitalCredential'
12
- import { computeEntryHash } from '@veramo/utils'
13
- import { AddCredentialArgs } from '../types/digitalCredential/IAbstractDigitalCredentialStore'
14
- import { nonPersistedDigitalCredentialEntityFromAddArgs } from '../utils/digitalCredential/MappingUtils'
15
- import { createHash } from 'crypto'
16
-
17
- describe('Database entities tests', (): void => {
18
- let dbConnection: DataSource
19
-
20
- beforeEach(async (): Promise<void> => {
21
- DataSources.singleInstance().defaultDbType = 'sqlite'
22
- dbConnection = await new DataSource({
23
- type: 'sqlite',
24
- database: ':memory:',
25
- //logging: 'all',
26
- migrationsRun: false,
27
- migrations: DataStoreDigitalCredentialMigrations,
28
- synchronize: false,
29
- entities: [...DataStoreDigitalCredentialEntities],
30
- }).initialize()
31
- await dbConnection.runMigrations()
32
- expect(await dbConnection.showMigrations()).toBeFalsy()
33
- })
34
-
35
- afterEach(async (): Promise<void> => {
36
- await (await dbConnection).destroy()
37
- })
38
-
39
- it('should save digital credential to database', async (): Promise<void> => {
40
- const rawCredential: string =
41
- 'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw'
42
- const digitalCredential: AddCredentialArgs = {
43
- rawDocument: rawCredential,
44
- kmsKeyRef: 'testRef',
45
- identifierMethod: 'did',
46
- issuerCorrelationType: CredentialCorrelationType.DID,
47
- subjectCorrelationType: CredentialCorrelationType.DID,
48
- issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
49
- subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
50
- credentialRole: CredentialRole.VERIFIER,
51
- tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
52
- }
53
-
54
- const digitalCredentialEntity: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs(digitalCredential)
55
- const fromDb: DigitalCredentialEntity = await dbConnection.getRepository(DigitalCredentialEntity).save(digitalCredentialEntity)
56
- expect(fromDb).toBeDefined()
57
- expect(fromDb?.id).not.toBeNull()
58
- expect(fromDb?.documentType).toEqual(DocumentType.VC)
59
- expect(fromDb?.documentFormat).toEqual(CredentialDocumentFormat.JWT)
60
- expect(fromDb?.rawDocument).toEqual(rawCredential)
61
- expect(fromDb?.hash).toEqual(computeEntryHash(rawCredential))
62
- expect(fromDb?.issuerCorrelationType).toEqual(CredentialCorrelationType.DID)
63
- expect(fromDb?.subjectCorrelationType).toEqual(CredentialCorrelationType.DID)
64
- expect(fromDb?.issuerCorrelationId).toEqual('did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj')
65
- expect(fromDb?.subjectCorrelationId).toEqual('did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj')
66
- expect(fromDb?.tenantId).toEqual('urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj')
67
- })
68
-
69
- it('should assign correct values to DigitalCredential: jwt credential 1', () => {
70
- const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
71
- rawDocument:
72
- 'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw',
73
- kmsKeyRef: 'testRef',
74
- identifierMethod: 'did',
75
- issuerCorrelationType: CredentialCorrelationType.DID,
76
- subjectCorrelationType: CredentialCorrelationType.DID,
77
- issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
78
- subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
79
- credentialRole: CredentialRole.VERIFIER,
80
- tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
81
- })
82
- expect(digitalCredential.documentType).toEqual(DocumentType.VC)
83
- expect(digitalCredential.validFrom).toEqual(new Date('2024-02-20T14:53:28.000Z'))
84
- expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.JWT)
85
- expect(digitalCredential.validUntil).toEqual(undefined)
86
- })
87
-
88
- it('should assign correct values to DigitalCredential: jwt credential 2', () => {
89
- const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
90
- rawDocument:
91
- 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDpleGFtcGxlOmFiZmUxM2Y3MTIxMjA0MzFjMjc2ZTEyZWNhYiNrZXlzLTEifQ.eyJzdWIiOiJkaWQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEiLCJqdGkiOiJodHRwOi8vZXhhbXBsZS5lZHUvY3JlZGVudGlhbHMvMzczMiIsImlzcyI6Imh0dHBzOi8vZXhhbXBsZS5jb20va2V5cy9mb28uandrIiwibmJmIjoxNTQxNDkzNzI0LCJpYXQiOjE1NDE0OTM3MjQsImV4cCI6MTU3MzAyOTcyMywibm9uY2UiOiI2NjAhNjM0NUZTZXIiLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL2V4YW1wbGVzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJVbml2ZXJzaXR5RGVncmVlQ3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJkZWdyZWUiOnsidHlwZSI6IkJhY2hlbG9yRGVncmVlIiwibmFtZSI6IjxzcGFuIGxhbmc9J2ZyLUNBJz5CYWNjYWxhdXLDqWF0IGVuIG11c2lxdWVzIG51bcOpcmlxdWVzPC9zcGFuPiJ9fX19.KLJo5GAyBND3LDTn9H7FQokEsUEi8jKwXhGvoN3JtRa51xrNDgXDb0cq1UTYB-rK4Ft9YVmR1NI_ZOF8oGc_7wAp8PHbF2HaWodQIoOBxxT-4WNqAxft7ET6lkH-4S6Ux3rSGAmczMohEEf8eCeN-jC8WekdPl6zKZQj0YPB1rx6X0-xlFBs7cl6Wt8rfBP_tZ9YgVWrQmUWypSioc0MUyiphmyEbLZagTyPlUyflGlEdqrZAv6eSe6RtxJy6M1-lD7a5HTzanYTWBPAUHDZGyGKXdJw-W_x0IWChBzI8t3kpG253fg6V3tPgHeKXE94fz_QpYfg--7kLsyBAfQGbg',
92
- kmsKeyRef: 'testRef',
93
- identifierMethod: 'did',
94
- issuerCorrelationType: CredentialCorrelationType.DID,
95
- subjectCorrelationType: CredentialCorrelationType.DID,
96
- issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
97
- subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
98
- credentialRole: CredentialRole.VERIFIER,
99
- tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
100
- })
101
- expect(digitalCredential.documentType).toEqual(DocumentType.VC)
102
- expect(digitalCredential.validFrom).toEqual(new Date('2018-11-06T08:42:04.000Z'))
103
- expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.JWT)
104
- expect(digitalCredential.validUntil).toEqual(new Date('2019-11-06T08:42:03.000Z'))
105
- })
106
-
107
- it('should assign correct values to DigitalCredential: signed ldb credential', () => {
108
- const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
109
- rawDocument: JSON.stringify({
110
- id: 'cred:gatc:NjMxNjc0NTA0ZjVmZmYwY2U0Y2M3NTRk',
111
- type: ['VerifiableCredential', 'emailCredential'],
112
- '@context': ['https://www.w3.org/2018/credentials/v1', 'https://www.w3.org/2018/credentials/examples/v1'],
113
- issuer: 'did:gatc:24gsRbsURij3edoveHv81jt9EnhggrnR',
114
- issuanceDate: '2022-01-07T11:54:12.000Z',
115
- credentialSubject: {
116
- email: 'jose@gataca.io',
117
- id: 'did:gatc:YzQxNjRjM2U4YTUzZGVkNjhmNjAxYzk5',
118
- },
119
- credentialStatus: {
120
- id: 'https://backbone.gataca.io/api/v1/group/otp/status',
121
- type: 'CredentialStatusList2017',
122
- },
123
- credentialSchema: [],
124
- proof: [
125
- {
126
- created: '2022-01-07T11:53:21Z',
127
- creator: 'did:gatc:24gsRbsURij3edoveHv81jt9EnhggrnR#keys-1',
128
- domain: 'gataca.io',
129
- nonce: 'sUzybVzzg1ZXFw-xDqSeMP3-TiZqKOtxszk0K4Ag5X8=',
130
- proofPurpose: 'assertionMethod',
131
- signatureValue: 'qGIh5JLxollEek5l1yFUcwmHj2H1ZYn3PR8uTa5bDtIcpW6MKKJDpc5_YQjqHGVUKbre8EMDI7e07lgR1ZJ9Bg',
132
- type: 'JcsEd25519Signature2020',
133
- verificationMethod: 'did:gatc:24gsRbsURij3edoveHv81jt9EnhggrnR#keys-1',
134
- },
135
- ],
136
- }),
137
- kmsKeyRef: 'testRef',
138
- identifierMethod: 'did',
139
- issuerCorrelationType: CredentialCorrelationType.DID,
140
- subjectCorrelationType: CredentialCorrelationType.DID,
141
- issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
142
- subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
143
- tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
144
- credentialRole: CredentialRole.VERIFIER,
145
- })
146
- expect(digitalCredential.documentType).toEqual(DocumentType.VC)
147
- expect(digitalCredential.validFrom).toEqual(new Date('2022-01-07T11:54:12.000Z'))
148
- expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.JSON_LD)
149
- expect(digitalCredential.validUntil).toEqual(undefined)
150
- })
151
-
152
- it('should assign correct values to DigitalCredential: signed ldb presentation', () => {
153
- const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
154
- rawDocument: JSON.stringify({
155
- '@context': ['https://www.w3.org/2018/credentials/v1', 'https://identity.foundation/presentation-exchange/submission/v1'],
156
- type: ['VerifiablePresentation'],
157
- verifiableCredential: [
158
- {
159
- iss: 'did:example:123',
160
- vc: {
161
- '@context': 'https://eu.com/claims/DriversLicense',
162
- id: 'https://eu.com/claims/DriversLicense',
163
- type: ['EUDriversLicense'],
164
- issuer: 'did:example:123',
165
- issuanceDate: '2010-01-01T19:73:24Z',
166
- credentialSubject: {
167
- id: 'did:example:ebfeb1f712ebc6f1c276e12ec21',
168
- accounts: [
169
- {
170
- id: '1234567890',
171
- route: 'DE-9876543210',
172
- },
173
- {
174
- id: '2457913570',
175
- route: 'DE-0753197542',
176
- },
177
- ],
178
- },
179
- },
180
- proof: {
181
- type: 'EcdsaSecp256k1VerificationKey2019',
182
- created: '2017-06-18T21:19:10Z',
183
- proofPurpose: 'assertionMethod',
184
- verificationMethod: 'https://example.edu/issuers/keys/1',
185
- jws: '...',
186
- },
187
- },
188
- {
189
- '@context': 'https://business-standards.org/schemas/employment-history.json',
190
- id: 'https://business-standards.org/schemas/employment-history.json',
191
- type: ['VerifiableCredential', 'GenericEmploymentCredential'],
192
- issuer: 'did:foo:123',
193
- issuanceDate: '2010-01-01T19:73:24Z',
194
- credentialSubject: {
195
- id: 'did:example:ebfeb1f712ebc6f1c276e12ec21',
196
- active: true,
197
- },
198
- proof: {
199
- type: 'EcdsaSecp256k1VerificationKey2019',
200
- created: '2017-06-18T21:19:10Z',
201
- proofPurpose: 'assertionMethod',
202
- verificationMethod: 'https://example.edu/issuers/keys/1',
203
- jws: '...',
204
- },
205
- },
206
- {
207
- '@context': 'https://www.w3.org/2018/credentials/v1',
208
- id: 'https://eu.com/claims/DriversLicense',
209
- type: ['EUDriversLicense'],
210
- issuer: 'did:foo:123',
211
- issuanceDate: '2010-01-01T19:73:24Z',
212
- credentialSubject: {
213
- id: 'did:example:ebfeb1f712ebc6f1c276e12ec21',
214
- license: {
215
- number: '34DGE352',
216
- dob: '07/13/80',
217
- },
218
- },
219
- proof: {
220
- type: 'RsaSignature2018',
221
- created: '2017-06-18T21:19:10Z',
222
- proofPurpose: 'assertionMethod',
223
- verificationMethod: 'https://example.edu/issuers/keys/1',
224
- jws: '...',
225
- },
226
- },
227
- ],
228
- proof: {
229
- type: 'RsaSignature2018',
230
- created: '2018-09-14T21:19:10Z',
231
- proofPurpose: 'authentication',
232
- verificationMethod: 'did:example:ebfeb1f712ebc6f1c276e12ec21#keys-1',
233
- challenge: '1f44d55f-f161-4938-a659-f8026467f126',
234
- domain: '4jt78h47fh47',
235
- jws: '...',
236
- },
237
- }),
238
- kmsKeyRef: 'testRef',
239
- identifierMethod: 'did',
240
- issuerCorrelationType: CredentialCorrelationType.DID,
241
- subjectCorrelationType: CredentialCorrelationType.DID,
242
- issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
243
- subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
244
- credentialRole: CredentialRole.VERIFIER,
245
- tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
246
- })
247
- expect(digitalCredential.documentType).toEqual(DocumentType.VP)
248
- expect(digitalCredential.validFrom).toEqual(undefined)
249
- expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.JSON_LD)
250
- expect(digitalCredential.validUntil).toEqual(undefined)
251
- })
252
-
253
- it('should assign correct values to DigitalCredential: signed sd_jwt credential', () => {
254
- const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
255
- rawDocument:
256
- 'eyJhbGciOiJFZERTQSIsInR5cCI6InZjK3NkLWp3dCIsImtpZCI6IiN6Nk1rdHF0WE5HOENEVVk5UHJydG9TdEZ6ZUNuaHBNbWd4WUwxZ2lrY1czQnp2TlcifQ.eyJ2Y3QiOiJJZGVudGl0eUNyZWRlbnRpYWwiLCJmYW1pbHlfbmFtZSI6IkRvZSIsInBob25lX251bWJlciI6IisxLTIwMi01NTUtMDEwMSIsImFkZHJlc3MiOnsic3RyZWV0X2FkZHJlc3MiOiIxMjMgTWFpbiBTdCIsImxvY2FsaXR5IjoiQW55dG93biIsIl9zZCI6WyJOSm5tY3QwQnFCTUUxSmZCbEM2alJRVlJ1ZXZwRU9OaVl3N0E3TUh1SnlRIiwib201Wnp0WkhCLUdkMDBMRzIxQ1ZfeE00RmFFTlNvaWFPWG5UQUpOY3pCNCJdfSwiY25mIjp7Imp3ayI6eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6Im9FTlZzeE9VaUg1NFg4d0pMYVZraWNDUmswMHdCSVE0c1JnYms1NE44TW8ifX0sImlzcyI6ImRpZDprZXk6ejZNa3RxdFhORzhDRFVZOVBycnRvU3RGemVDbmhwTW1neFlMMWdpa2NXM0J6dk5XIiwiaWF0IjoxNjk4MTUxNTMyLCJfc2RfYWxnIjoic2hhLTI1NiIsIl9zZCI6WyIxQ3VyMmsyQTJvSUI1Q3NoU0lmX0FfS2ctbDI2dV9xS3VXUTc5UDBWZGFzIiwiUjF6VFV2T1lIZ2NlcGowakh5cEdIejlFSHR0VktmdDB5c3diYzlFVFBiVSIsImVEcVFwZFRYSlhiV2hmLUVzSTd6dzVYNk92WW1GTi1VWlFRTWVzWHdLUHciLCJwZERrMl9YQUtIbzdnT0Fmd0YxYjdPZENVVlRpdDJrSkhheFNFQ1E5eGZjIiwicHNhdUtVTldFaTA5bnUzQ2w4OXhLWGdtcFdFTlpsNXV5MU4xbnluX2pNayIsInNOX2dlMHBIWEY2cW1zWW5YMUE5U2R3SjhjaDhhRU5reGJPRHNUNzRZd0kiXX0.coOK8NzJmEWz4qx-qRhjo-RK7aejrSkQM9La9Cw3eWmzcja9DXrkBoQZKbIJtNoSzSPLjwK2V71W78z0miZsDQ~WyJzYWx0IiwiaXNfb3Zlcl82NSIsdHJ1ZV0~WyJzYWx0IiwiaXNfb3Zlcl8yMSIsdHJ1ZV0~WyJzYWx0IiwiZW1haWwiLCJqb2huZG9lQGV4YW1wbGUuY29tIl0~WyJzYWx0IiwiY291bnRyeSIsIlVTIl0~WyJzYWx0IiwiZ2l2ZW5fbmFtZSIsIkpvaG4iXQ~eyJhbGciOiJFZERTQSIsInR5cCI6ImtiK2p3dCJ9.eyJpYXQiOjE2OTgxNTE1MzIsIm5vbmNlIjoic2FsdCIsImF1ZCI6ImRpZDprZXk6elVDNzRWRXFxaEVIUWNndjR6YWdTUGtxRkp4dU5XdW9CUEtqSnVIRVRFVWVITG9TcVd0OTJ2aVNzbWFXank4MnkiLCJfc2RfaGFzaCI6Ii1kTUd4OGZhUnpOQm91a2EwU0R6V2JkS3JYckw1TFVmUlNQTHN2Q2xPMFkifQ.TQQLqc4ZzoKjQfAghAzC_4aaU3KCS8YqzxAJtzT124guzkv9XSHtPN8d3z181_v-ca2ATXjTRoRciozitE6wBA',
257
- kmsKeyRef: 'testRef',
258
- identifierMethod: 'did',
259
- issuerCorrelationType: CredentialCorrelationType.DID,
260
- subjectCorrelationType: CredentialCorrelationType.DID,
261
- issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
262
- subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
263
- credentialRole: CredentialRole.VERIFIER,
264
- tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
265
- opts: {
266
- hasher: (data, algorithm) => createHash(algorithm).update(data).digest(),
267
- },
268
- })
269
- expect(digitalCredential.documentType).toEqual(DocumentType.VC)
270
- expect(digitalCredential.validFrom).toEqual(new Date('2023-10-24T12:45:32.000Z'))
271
- expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.SD_JWT)
272
- expect(digitalCredential.validUntil).toEqual(undefined)
273
- })
274
- })
1
+ import { DataSources } from '@sphereon/ssi-sdk.agent-config'
2
+ import { DataSource } from 'typeorm'
3
+ import { CredentialRole, DataStoreDigitalCredentialEntities } from '../index'
4
+ import { DataStoreDigitalCredentialMigrations } from '../migrations'
5
+ import { DigitalCredentialEntity } from '../entities/digitalCredential/DigitalCredentialEntity'
6
+ import {
7
+ CredentialCorrelationType,
8
+ CredentialDocumentFormat,
9
+ DocumentType,
10
+ NonPersistedDigitalCredential,
11
+ } from '../types/digitalCredential/digitalCredential'
12
+ import { computeEntryHash } from '@veramo/utils'
13
+ import { AddCredentialArgs } from '../types/digitalCredential/IAbstractDigitalCredentialStore'
14
+ import { nonPersistedDigitalCredentialEntityFromAddArgs } from '../utils/digitalCredential/MappingUtils'
15
+ import { createHash } from 'crypto'
16
+
17
+ describe('Database entities tests', (): void => {
18
+ let dbConnection: DataSource
19
+
20
+ beforeEach(async (): Promise<void> => {
21
+ DataSources.singleInstance().defaultDbType = 'sqlite'
22
+ dbConnection = await new DataSource({
23
+ type: 'sqlite',
24
+ database: ':memory:',
25
+ //logging: 'all',
26
+ migrationsRun: false,
27
+ migrations: DataStoreDigitalCredentialMigrations,
28
+ synchronize: false,
29
+ entities: [...DataStoreDigitalCredentialEntities],
30
+ }).initialize()
31
+ await dbConnection.runMigrations()
32
+ expect(await dbConnection.showMigrations()).toBeFalsy()
33
+ })
34
+
35
+ afterEach(async (): Promise<void> => {
36
+ await (await dbConnection).destroy()
37
+ })
38
+
39
+ it('should save digital credential to database', async (): Promise<void> => {
40
+ const rawCredential: string =
41
+ 'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw'
42
+ const digitalCredential: AddCredentialArgs = {
43
+ rawDocument: rawCredential,
44
+ kmsKeyRef: 'testRef',
45
+ identifierMethod: 'did',
46
+ issuerCorrelationType: CredentialCorrelationType.DID,
47
+ subjectCorrelationType: CredentialCorrelationType.DID,
48
+ issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
49
+ subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
50
+ credentialRole: CredentialRole.VERIFIER,
51
+ tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
52
+ }
53
+
54
+ const digitalCredentialEntity: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs(digitalCredential)
55
+ const fromDb: DigitalCredentialEntity = await dbConnection.getRepository(DigitalCredentialEntity).save(digitalCredentialEntity)
56
+ expect(fromDb).toBeDefined()
57
+ expect(fromDb?.id).not.toBeNull()
58
+ expect(fromDb?.documentType).toEqual(DocumentType.VC)
59
+ expect(fromDb?.documentFormat).toEqual(CredentialDocumentFormat.JWT)
60
+ expect(fromDb?.rawDocument).toEqual(rawCredential)
61
+ expect(fromDb?.hash).toEqual(computeEntryHash(rawCredential))
62
+ expect(fromDb?.issuerCorrelationType).toEqual(CredentialCorrelationType.DID)
63
+ expect(fromDb?.subjectCorrelationType).toEqual(CredentialCorrelationType.DID)
64
+ expect(fromDb?.issuerCorrelationId).toEqual('did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj')
65
+ expect(fromDb?.subjectCorrelationId).toEqual('did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj')
66
+ expect(fromDb?.tenantId).toEqual('urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj')
67
+ })
68
+
69
+ it('should assign correct values to DigitalCredential: jwt credential 1', () => {
70
+ const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
71
+ rawDocument:
72
+ 'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw',
73
+ kmsKeyRef: 'testRef',
74
+ identifierMethod: 'did',
75
+ issuerCorrelationType: CredentialCorrelationType.DID,
76
+ subjectCorrelationType: CredentialCorrelationType.DID,
77
+ issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
78
+ subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
79
+ credentialRole: CredentialRole.VERIFIER,
80
+ tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
81
+ })
82
+ expect(digitalCredential.documentType).toEqual(DocumentType.VC)
83
+ expect(digitalCredential.validFrom).toEqual(new Date('2024-02-20T14:53:28.000Z'))
84
+ expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.JWT)
85
+ expect(digitalCredential.validUntil).toEqual(undefined)
86
+ })
87
+
88
+ it('should assign correct values to DigitalCredential: jwt credential 2', () => {
89
+ const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
90
+ rawDocument:
91
+ 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDpleGFtcGxlOmFiZmUxM2Y3MTIxMjA0MzFjMjc2ZTEyZWNhYiNrZXlzLTEifQ.eyJzdWIiOiJkaWQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEiLCJqdGkiOiJodHRwOi8vZXhhbXBsZS5lZHUvY3JlZGVudGlhbHMvMzczMiIsImlzcyI6Imh0dHBzOi8vZXhhbXBsZS5jb20va2V5cy9mb28uandrIiwibmJmIjoxNTQxNDkzNzI0LCJpYXQiOjE1NDE0OTM3MjQsImV4cCI6MTU3MzAyOTcyMywibm9uY2UiOiI2NjAhNjM0NUZTZXIiLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL2V4YW1wbGVzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJVbml2ZXJzaXR5RGVncmVlQ3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJkZWdyZWUiOnsidHlwZSI6IkJhY2hlbG9yRGVncmVlIiwibmFtZSI6IjxzcGFuIGxhbmc9J2ZyLUNBJz5CYWNjYWxhdXLDqWF0IGVuIG11c2lxdWVzIG51bcOpcmlxdWVzPC9zcGFuPiJ9fX19.KLJo5GAyBND3LDTn9H7FQokEsUEi8jKwXhGvoN3JtRa51xrNDgXDb0cq1UTYB-rK4Ft9YVmR1NI_ZOF8oGc_7wAp8PHbF2HaWodQIoOBxxT-4WNqAxft7ET6lkH-4S6Ux3rSGAmczMohEEf8eCeN-jC8WekdPl6zKZQj0YPB1rx6X0-xlFBs7cl6Wt8rfBP_tZ9YgVWrQmUWypSioc0MUyiphmyEbLZagTyPlUyflGlEdqrZAv6eSe6RtxJy6M1-lD7a5HTzanYTWBPAUHDZGyGKXdJw-W_x0IWChBzI8t3kpG253fg6V3tPgHeKXE94fz_QpYfg--7kLsyBAfQGbg',
92
+ kmsKeyRef: 'testRef',
93
+ identifierMethod: 'did',
94
+ issuerCorrelationType: CredentialCorrelationType.DID,
95
+ subjectCorrelationType: CredentialCorrelationType.DID,
96
+ issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
97
+ subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
98
+ credentialRole: CredentialRole.VERIFIER,
99
+ tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
100
+ })
101
+ expect(digitalCredential.documentType).toEqual(DocumentType.VC)
102
+ expect(digitalCredential.validFrom).toEqual(new Date('2018-11-06T08:42:04.000Z'))
103
+ expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.JWT)
104
+ expect(digitalCredential.validUntil).toEqual(new Date('2019-11-06T08:42:03.000Z'))
105
+ })
106
+
107
+ it('should assign correct values to DigitalCredential: signed ldb credential', () => {
108
+ const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
109
+ rawDocument: JSON.stringify({
110
+ id: 'cred:gatc:NjMxNjc0NTA0ZjVmZmYwY2U0Y2M3NTRk',
111
+ type: ['VerifiableCredential', 'emailCredential'],
112
+ '@context': ['https://www.w3.org/2018/credentials/v1', 'https://www.w3.org/2018/credentials/examples/v1'],
113
+ issuer: 'did:gatc:24gsRbsURij3edoveHv81jt9EnhggrnR',
114
+ issuanceDate: '2022-01-07T11:54:12.000Z',
115
+ credentialSubject: {
116
+ email: 'jose@gataca.io',
117
+ id: 'did:gatc:YzQxNjRjM2U4YTUzZGVkNjhmNjAxYzk5',
118
+ },
119
+ credentialStatus: {
120
+ id: 'https://backbone.gataca.io/api/v1/group/otp/status',
121
+ type: 'CredentialStatusList2017',
122
+ },
123
+ credentialSchema: [],
124
+ proof: [
125
+ {
126
+ created: '2022-01-07T11:53:21Z',
127
+ creator: 'did:gatc:24gsRbsURij3edoveHv81jt9EnhggrnR#keys-1',
128
+ domain: 'gataca.io',
129
+ nonce: 'sUzybVzzg1ZXFw-xDqSeMP3-TiZqKOtxszk0K4Ag5X8=',
130
+ proofPurpose: 'assertionMethod',
131
+ signatureValue: 'qGIh5JLxollEek5l1yFUcwmHj2H1ZYn3PR8uTa5bDtIcpW6MKKJDpc5_YQjqHGVUKbre8EMDI7e07lgR1ZJ9Bg',
132
+ type: 'JcsEd25519Signature2020',
133
+ verificationMethod: 'did:gatc:24gsRbsURij3edoveHv81jt9EnhggrnR#keys-1',
134
+ },
135
+ ],
136
+ }),
137
+ kmsKeyRef: 'testRef',
138
+ identifierMethod: 'did',
139
+ issuerCorrelationType: CredentialCorrelationType.DID,
140
+ subjectCorrelationType: CredentialCorrelationType.DID,
141
+ issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
142
+ subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
143
+ tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
144
+ credentialRole: CredentialRole.VERIFIER,
145
+ })
146
+ expect(digitalCredential.documentType).toEqual(DocumentType.VC)
147
+ expect(digitalCredential.validFrom).toEqual(new Date('2022-01-07T11:54:12.000Z'))
148
+ expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.JSON_LD)
149
+ expect(digitalCredential.validUntil).toEqual(undefined)
150
+ })
151
+
152
+ it('should assign correct values to DigitalCredential: signed ldb presentation', () => {
153
+ const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
154
+ rawDocument: JSON.stringify({
155
+ '@context': ['https://www.w3.org/2018/credentials/v1', 'https://identity.foundation/presentation-exchange/submission/v1'],
156
+ type: ['VerifiablePresentation'],
157
+ verifiableCredential: [
158
+ {
159
+ iss: 'did:example:123',
160
+ vc: {
161
+ '@context': 'https://eu.com/claims/DriversLicense',
162
+ id: 'https://eu.com/claims/DriversLicense',
163
+ type: ['EUDriversLicense'],
164
+ issuer: 'did:example:123',
165
+ issuanceDate: '2010-01-01T19:73:24Z',
166
+ credentialSubject: {
167
+ id: 'did:example:ebfeb1f712ebc6f1c276e12ec21',
168
+ accounts: [
169
+ {
170
+ id: '1234567890',
171
+ route: 'DE-9876543210',
172
+ },
173
+ {
174
+ id: '2457913570',
175
+ route: 'DE-0753197542',
176
+ },
177
+ ],
178
+ },
179
+ },
180
+ proof: {
181
+ type: 'EcdsaSecp256k1VerificationKey2019',
182
+ created: '2017-06-18T21:19:10Z',
183
+ proofPurpose: 'assertionMethod',
184
+ verificationMethod: 'https://example.edu/issuers/keys/1',
185
+ jws: '...',
186
+ },
187
+ },
188
+ {
189
+ '@context': 'https://business-standards.org/schemas/employment-history.json',
190
+ id: 'https://business-standards.org/schemas/employment-history.json',
191
+ type: ['VerifiableCredential', 'GenericEmploymentCredential'],
192
+ issuer: 'did:foo:123',
193
+ issuanceDate: '2010-01-01T19:73:24Z',
194
+ credentialSubject: {
195
+ id: 'did:example:ebfeb1f712ebc6f1c276e12ec21',
196
+ active: true,
197
+ },
198
+ proof: {
199
+ type: 'EcdsaSecp256k1VerificationKey2019',
200
+ created: '2017-06-18T21:19:10Z',
201
+ proofPurpose: 'assertionMethod',
202
+ verificationMethod: 'https://example.edu/issuers/keys/1',
203
+ jws: '...',
204
+ },
205
+ },
206
+ {
207
+ '@context': 'https://www.w3.org/2018/credentials/v1',
208
+ id: 'https://eu.com/claims/DriversLicense',
209
+ type: ['EUDriversLicense'],
210
+ issuer: 'did:foo:123',
211
+ issuanceDate: '2010-01-01T19:73:24Z',
212
+ credentialSubject: {
213
+ id: 'did:example:ebfeb1f712ebc6f1c276e12ec21',
214
+ license: {
215
+ number: '34DGE352',
216
+ dob: '07/13/80',
217
+ },
218
+ },
219
+ proof: {
220
+ type: 'RsaSignature2018',
221
+ created: '2017-06-18T21:19:10Z',
222
+ proofPurpose: 'assertionMethod',
223
+ verificationMethod: 'https://example.edu/issuers/keys/1',
224
+ jws: '...',
225
+ },
226
+ },
227
+ ],
228
+ proof: {
229
+ type: 'RsaSignature2018',
230
+ created: '2018-09-14T21:19:10Z',
231
+ proofPurpose: 'authentication',
232
+ verificationMethod: 'did:example:ebfeb1f712ebc6f1c276e12ec21#keys-1',
233
+ challenge: '1f44d55f-f161-4938-a659-f8026467f126',
234
+ domain: '4jt78h47fh47',
235
+ jws: '...',
236
+ },
237
+ }),
238
+ kmsKeyRef: 'testRef',
239
+ identifierMethod: 'did',
240
+ issuerCorrelationType: CredentialCorrelationType.DID,
241
+ subjectCorrelationType: CredentialCorrelationType.DID,
242
+ issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
243
+ subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
244
+ credentialRole: CredentialRole.VERIFIER,
245
+ tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
246
+ })
247
+ expect(digitalCredential.documentType).toEqual(DocumentType.VP)
248
+ expect(digitalCredential.validFrom).toEqual(undefined)
249
+ expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.JSON_LD)
250
+ expect(digitalCredential.validUntil).toEqual(undefined)
251
+ })
252
+
253
+ it('should assign correct values to DigitalCredential: signed sd_jwt credential', () => {
254
+ const digitalCredential: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs({
255
+ rawDocument:
256
+ 'eyJhbGciOiJFZERTQSIsInR5cCI6InZjK3NkLWp3dCIsImtpZCI6IiN6Nk1rdHF0WE5HOENEVVk5UHJydG9TdEZ6ZUNuaHBNbWd4WUwxZ2lrY1czQnp2TlcifQ.eyJ2Y3QiOiJJZGVudGl0eUNyZWRlbnRpYWwiLCJmYW1pbHlfbmFtZSI6IkRvZSIsInBob25lX251bWJlciI6IisxLTIwMi01NTUtMDEwMSIsImFkZHJlc3MiOnsic3RyZWV0X2FkZHJlc3MiOiIxMjMgTWFpbiBTdCIsImxvY2FsaXR5IjoiQW55dG93biIsIl9zZCI6WyJOSm5tY3QwQnFCTUUxSmZCbEM2alJRVlJ1ZXZwRU9OaVl3N0E3TUh1SnlRIiwib201Wnp0WkhCLUdkMDBMRzIxQ1ZfeE00RmFFTlNvaWFPWG5UQUpOY3pCNCJdfSwiY25mIjp7Imp3ayI6eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6Im9FTlZzeE9VaUg1NFg4d0pMYVZraWNDUmswMHdCSVE0c1JnYms1NE44TW8ifX0sImlzcyI6ImRpZDprZXk6ejZNa3RxdFhORzhDRFVZOVBycnRvU3RGemVDbmhwTW1neFlMMWdpa2NXM0J6dk5XIiwiaWF0IjoxNjk4MTUxNTMyLCJfc2RfYWxnIjoic2hhLTI1NiIsIl9zZCI6WyIxQ3VyMmsyQTJvSUI1Q3NoU0lmX0FfS2ctbDI2dV9xS3VXUTc5UDBWZGFzIiwiUjF6VFV2T1lIZ2NlcGowakh5cEdIejlFSHR0VktmdDB5c3diYzlFVFBiVSIsImVEcVFwZFRYSlhiV2hmLUVzSTd6dzVYNk92WW1GTi1VWlFRTWVzWHdLUHciLCJwZERrMl9YQUtIbzdnT0Fmd0YxYjdPZENVVlRpdDJrSkhheFNFQ1E5eGZjIiwicHNhdUtVTldFaTA5bnUzQ2w4OXhLWGdtcFdFTlpsNXV5MU4xbnluX2pNayIsInNOX2dlMHBIWEY2cW1zWW5YMUE5U2R3SjhjaDhhRU5reGJPRHNUNzRZd0kiXX0.coOK8NzJmEWz4qx-qRhjo-RK7aejrSkQM9La9Cw3eWmzcja9DXrkBoQZKbIJtNoSzSPLjwK2V71W78z0miZsDQ~WyJzYWx0IiwiaXNfb3Zlcl82NSIsdHJ1ZV0~WyJzYWx0IiwiaXNfb3Zlcl8yMSIsdHJ1ZV0~WyJzYWx0IiwiZW1haWwiLCJqb2huZG9lQGV4YW1wbGUuY29tIl0~WyJzYWx0IiwiY291bnRyeSIsIlVTIl0~WyJzYWx0IiwiZ2l2ZW5fbmFtZSIsIkpvaG4iXQ~eyJhbGciOiJFZERTQSIsInR5cCI6ImtiK2p3dCJ9.eyJpYXQiOjE2OTgxNTE1MzIsIm5vbmNlIjoic2FsdCIsImF1ZCI6ImRpZDprZXk6elVDNzRWRXFxaEVIUWNndjR6YWdTUGtxRkp4dU5XdW9CUEtqSnVIRVRFVWVITG9TcVd0OTJ2aVNzbWFXank4MnkiLCJfc2RfaGFzaCI6Ii1kTUd4OGZhUnpOQm91a2EwU0R6V2JkS3JYckw1TFVmUlNQTHN2Q2xPMFkifQ.TQQLqc4ZzoKjQfAghAzC_4aaU3KCS8YqzxAJtzT124guzkv9XSHtPN8d3z181_v-ca2ATXjTRoRciozitE6wBA',
257
+ kmsKeyRef: 'testRef',
258
+ identifierMethod: 'did',
259
+ issuerCorrelationType: CredentialCorrelationType.DID,
260
+ subjectCorrelationType: CredentialCorrelationType.DID,
261
+ issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
262
+ subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
263
+ credentialRole: CredentialRole.VERIFIER,
264
+ tenantId: 'urn:uuid:nnag4b43-1e7a-98f8-a32c-a48dbc5b10mj',
265
+ opts: {
266
+ hasher: (data, algorithm) => createHash(algorithm).update(data).digest(),
267
+ },
268
+ })
269
+ expect(digitalCredential.documentType).toEqual(DocumentType.VC)
270
+ expect(digitalCredential.validFrom).toEqual(new Date('2023-10-24T12:45:32.000Z'))
271
+ expect(digitalCredential.documentFormat).toEqual(CredentialDocumentFormat.SD_JWT)
272
+ expect(digitalCredential.validUntil).toEqual(undefined)
273
+ })
274
+ })