@sphereon/ssi-sdk.data-store 0.23.5-unstable.88 → 0.24.0

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