@sphereon/ssi-sdk.data-store 0.29.1-next.106 → 0.29.1-next.174
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.
- package/dist/digitalCredential/DigitalCredentialStore.d.ts +5 -1
- package/dist/digitalCredential/DigitalCredentialStore.d.ts.map +1 -1
- package/dist/digitalCredential/DigitalCredentialStore.js +57 -8
- package/dist/digitalCredential/DigitalCredentialStore.js.map +1 -1
- package/dist/entities/digitalCredential/DigitalCredentialEntity.d.ts +9 -1
- package/dist/entities/digitalCredential/DigitalCredentialEntity.d.ts.map +1 -1
- package/dist/entities/digitalCredential/DigitalCredentialEntity.js +32 -0
- package/dist/entities/digitalCredential/DigitalCredentialEntity.js.map +1 -1
- package/dist/eventLogger/EventLoggerStore.d.ts +1 -0
- package/dist/eventLogger/EventLoggerStore.d.ts.map +1 -1
- package/dist/eventLogger/EventLoggerStore.js +5 -3
- package/dist/eventLogger/EventLoggerStore.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/issuanceBranding/IssuanceBrandingStore.d.ts +4 -0
- package/dist/issuanceBranding/IssuanceBrandingStore.d.ts.map +1 -1
- package/dist/issuanceBranding/IssuanceBrandingStore.js +42 -13
- package/dist/issuanceBranding/IssuanceBrandingStore.js.map +1 -1
- package/dist/migrations/postgres/1708525189001-CreateDigitalCredential.d.ts.map +1 -1
- package/dist/migrations/postgres/1708525189001-CreateDigitalCredential.js +16 -4
- package/dist/migrations/postgres/1708525189001-CreateDigitalCredential.js.map +1 -1
- package/dist/migrations/sqlite/1708525189002-CreateDigitalCredential.d.ts.map +1 -1
- package/dist/migrations/sqlite/1708525189002-CreateDigitalCredential.js +15 -5
- package/dist/migrations/sqlite/1708525189002-CreateDigitalCredential.js.map +1 -1
- package/dist/statusList/StatusListStore.d.ts +2 -2
- package/dist/statusList/StatusListStore.d.ts.map +1 -1
- package/dist/statusList/StatusListStore.js +4 -4
- package/dist/statusList/StatusListStore.js.map +1 -1
- package/dist/types/contact/contact.d.ts +2 -2
- package/dist/types/contact/contact.d.ts.map +1 -1
- package/dist/types/digitalCredential/IAbstractDigitalCredentialStore.d.ts +5 -1
- package/dist/types/digitalCredential/IAbstractDigitalCredentialStore.d.ts.map +1 -1
- package/dist/types/digitalCredential/digitalCredential.d.ts +20 -3
- package/dist/types/digitalCredential/digitalCredential.d.ts.map +1 -1
- package/dist/types/digitalCredential/digitalCredential.js +13 -5
- package/dist/types/digitalCredential/digitalCredential.js.map +1 -1
- package/dist/utils/contact/MappingUtils.d.ts.map +1 -1
- package/dist/utils/contact/MappingUtils.js +12 -25
- package/dist/utils/contact/MappingUtils.js.map +1 -1
- package/dist/utils/digitalCredential/MappingUtils.d.ts +4 -0
- package/dist/utils/digitalCredential/MappingUtils.d.ts.map +1 -1
- package/dist/utils/digitalCredential/MappingUtils.js +45 -9
- package/dist/utils/digitalCredential/MappingUtils.js.map +1 -1
- package/dist/utils/hasher.d.ts +3 -0
- package/dist/utils/hasher.d.ts.map +1 -0
- package/dist/utils/hasher.js +20 -0
- package/dist/utils/hasher.js.map +1 -0
- package/dist/utils/presentationDefinition/MappingUtils.d.ts.map +1 -1
- package/dist/utils/presentationDefinition/MappingUtils.js +1 -3
- package/dist/utils/presentationDefinition/MappingUtils.js.map +1 -1
- package/package.json +11 -8
- package/src/__tests__/digitalCredential.entities.test.ts +12 -0
- package/src/__tests__/digitalCredential.store.test.ts +22 -0
- package/src/digitalCredential/DigitalCredentialStore.ts +66 -10
- package/src/entities/digitalCredential/DigitalCredentialEntity.ts +25 -0
- package/src/eventLogger/EventLoggerStore.ts +25 -3
- package/src/index.ts +2 -0
- package/src/issuanceBranding/IssuanceBrandingStore.ts +62 -14
- package/src/migrations/postgres/1708525189001-CreateDigitalCredential.ts +17 -4
- package/src/migrations/sqlite/1708525189002-CreateDigitalCredential.ts +15 -5
- package/src/statusList/StatusListStore.ts +5 -6
- package/src/types/contact/contact.ts +2 -2
- package/src/types/digitalCredential/IAbstractDigitalCredentialStore.ts +5 -1
- package/src/types/digitalCredential/digitalCredential.ts +21 -5
- package/src/utils/contact/MappingUtils.ts +16 -39
- package/src/utils/digitalCredential/MappingUtils.ts +51 -10
- package/src/utils/hasher.ts +19 -0
- package/src/utils/presentationDefinition/MappingUtils.ts +1 -4
- package/dist/utils/FormattingUtils.d.ts +0 -2
- package/dist/utils/FormattingUtils.d.ts.map +0 -1
- package/dist/utils/FormattingUtils.js +0 -23
- package/dist/utils/FormattingUtils.js.map +0 -1
- package/dist/utils/eventLogger/MappingUtils.d.ts +0 -4
- package/dist/utils/eventLogger/MappingUtils.d.ts.map +0 -1
- package/dist/utils/eventLogger/MappingUtils.js +0 -10
- package/dist/utils/eventLogger/MappingUtils.js.map +0 -1
- package/dist/utils/issuanceBranding/MappingUtils.d.ts +0 -8
- package/dist/utils/issuanceBranding/MappingUtils.d.ts.map +0 -1
- package/dist/utils/issuanceBranding/MappingUtils.js +0 -20
- package/dist/utils/issuanceBranding/MappingUtils.js.map +0 -1
- package/src/utils/FormattingUtils.ts +0 -21
- package/src/utils/eventLogger/MappingUtils.ts +0 -28
- package/src/utils/issuanceBranding/MappingUtils.ts +0 -32
|
@@ -45,6 +45,8 @@ describe('Database entities tests', (): void => {
|
|
|
45
45
|
rawDocument: rawCredential,
|
|
46
46
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
47
47
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
48
|
+
kmsKeyRef: 'testRef',
|
|
49
|
+
identifierMethod: 'did',
|
|
48
50
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
49
51
|
subjectCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
50
52
|
credentialRole: CredentialRole.VERIFIER,
|
|
@@ -59,6 +61,8 @@ describe('Database entities tests', (): void => {
|
|
|
59
61
|
const digitalCredential: AddCredentialArgs = {
|
|
60
62
|
rawDocument:
|
|
61
63
|
'eyJhbGciOiJFZERTQSIsInR5cCI6InZjK3NkLWp3dCIsImtpZCI6IiN6Nk1rdHF0WE5HOENEVVk5UHJydG9TdEZ6ZUNuaHBNbWd4WUwxZ2lrY1czQnp2TlcifQ.eyJ2Y3QiOiJJZGVudGl0eUNyZWRlbnRpYWwiLCJmYW1pbHlfbmFtZSI6IkRvZSIsInBob25lX251bWJlciI6IisxLTIwMi01NTUtMDEwMSIsImFkZHJlc3MiOnsic3RyZWV0X2FkZHJlc3MiOiIxMjMgTWFpbiBTdCIsImxvY2FsaXR5IjoiQW55dG93biIsIl9zZCI6WyJOSm5tY3QwQnFCTUUxSmZCbEM2alJRVlJ1ZXZwRU9OaVl3N0E3TUh1SnlRIiwib201Wnp0WkhCLUdkMDBMRzIxQ1ZfeE00RmFFTlNvaWFPWG5UQUpOY3pCNCJdfSwiY25mIjp7Imp3ayI6eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6Im9FTlZzeE9VaUg1NFg4d0pMYVZraWNDUmswMHdCSVE0c1JnYms1NE44TW8ifX0sImlzcyI6ImRpZDprZXk6ejZNa3RxdFhORzhDRFVZOVBycnRvU3RGemVDbmhwTW1neFlMMWdpa2NXM0J6dk5XIiwiaWF0IjoxNjk4MTUxNTMyLCJfc2RfYWxnIjoic2hhLTI1NiIsIl9zZCI6WyIxQ3VyMmsyQTJvSUI1Q3NoU0lmX0FfS2ctbDI2dV9xS3VXUTc5UDBWZGFzIiwiUjF6VFV2T1lIZ2NlcGowakh5cEdIejlFSHR0VktmdDB5c3diYzlFVFBiVSIsImVEcVFwZFRYSlhiV2hmLUVzSTd6dzVYNk92WW1GTi1VWlFRTWVzWHdLUHciLCJwZERrMl9YQUtIbzdnT0Fmd0YxYjdPZENVVlRpdDJrSkhheFNFQ1E5eGZjIiwicHNhdUtVTldFaTA5bnUzQ2w4OXhLWGdtcFdFTlpsNXV5MU4xbnluX2pNayIsInNOX2dlMHBIWEY2cW1zWW5YMUE5U2R3SjhjaDhhRU5reGJPRHNUNzRZd0kiXX0.coOK8NzJmEWz4qx-qRhjo-RK7aejrSkQM9La9Cw3eWmzcja9DXrkBoQZKbIJtNoSzSPLjwK2V71W78z0miZsDQ~WyJzYWx0IiwiaXNfb3Zlcl82NSIsdHJ1ZV0~WyJzYWx0IiwiaXNfb3Zlcl8yMSIsdHJ1ZV0~WyJzYWx0IiwiZW1haWwiLCJqb2huZG9lQGV4YW1wbGUuY29tIl0~WyJzYWx0IiwiY291bnRyeSIsIlVTIl0~WyJzYWx0IiwiZ2l2ZW5fbmFtZSIsIkpvaG4iXQ~eyJhbGciOiJFZERTQSIsInR5cCI6ImtiK2p3dCJ9.eyJpYXQiOjE2OTgxNTE1MzIsIm5vbmNlIjoic2FsdCIsImF1ZCI6ImRpZDprZXk6elVDNzRWRXFxaEVIUWNndjR6YWdTUGtxRkp4dU5XdW9CUEtqSnVIRVRFVWVITG9TcVd0OTJ2aVNzbWFXank4MnkiLCJfc2RfaGFzaCI6Ii1kTUd4OGZhUnpOQm91a2EwU0R6V2JkS3JYckw1TFVmUlNQTHN2Q2xPMFkifQ.TQQLqc4ZzoKjQfAghAzC_4aaU3KCS8YqzxAJtzT124guzkv9XSHtPN8d3z181_v-ca2ATXjTRoRciozitE6wBA',
|
|
64
|
+
kmsKeyRef: 'testRef',
|
|
65
|
+
identifierMethod: 'did',
|
|
62
66
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
63
67
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
64
68
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
@@ -76,6 +80,8 @@ describe('Database entities tests', (): void => {
|
|
|
76
80
|
const addCredentialArgs1: AddCredentialArgs = {
|
|
77
81
|
rawDocument:
|
|
78
82
|
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw',
|
|
83
|
+
kmsKeyRef: 'testRef',
|
|
84
|
+
identifierMethod: 'did',
|
|
79
85
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
80
86
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
81
87
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
@@ -86,6 +92,8 @@ describe('Database entities tests', (): void => {
|
|
|
86
92
|
const addCredentialArgs2: AddCredentialArgs = {
|
|
87
93
|
rawDocument:
|
|
88
94
|
'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDkyMTQxNzgsInZjIjp7IkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJHdWVzdENyZWRlbnRpYWwiXSwiY3JlZGVudGlhbFN1YmplY3QiOnsiZmlyc3ROYW1lIjoiUyIsImxhc3ROYW1lIjoiSyIsIkUtbWFpbCI6IiIsInR5cGUiOiJTcGhlcmVvbiBHdWVzdCIsImlkIjoiZGlkOmp3azpleUpoYkdjaU9pSkZVekkxTmtzaUxDSjFjMlVpT2lKemFXY2lMQ0pyZEhraU9pSkZReUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW5naU9pSldjWGhIZVhWUk5WUTBXVEpzZGpKSFkybE9TaTFEYURCVWFGVm1kVk5RWm0wdFJYVlNZbGRNWlVOM0lpd2llU0k2SW01T1FWQnBiR0V5VDBRNGRXOXBXbk5LVm1aUmFrbDJTMUZUZWxBelFqVlBXbVZSYkVoQ1VUbHliVFFpZlEifX0sIkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJHdWVzdENyZWRlbnRpYWwiXSwiZXhwaXJhdGlvbkRhdGUiOiIyMDI0LTAyLTI5VDEzOjQyOjU4LjgzNVoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiRS1tYWlsIjoiIiwidHlwZSI6IlNwaGVyZW9uIEd1ZXN0IiwiaWQiOiJkaWQ6andrOmV5SmhiR2NpT2lKRlV6STFOa3NpTENKMWMyVWlPaUp6YVdjaUxDSnJkSGtpT2lKRlF5SXNJbU55ZGlJNkluTmxZM0F5TlRack1TSXNJbmdpT2lKV2NYaEhlWFZSTlZRMFdUSnNkakpIWTJsT1NpMURhREJVYUZWbWRWTlFabTB0UlhWU1lsZE1aVU4zSWl3aWVTSTZJbTVPUVZCcGJHRXlUMFE0ZFc5cFduTktWbVpSYWtsMlMxRlRlbEF6UWpWUFdtVlJiRWhDVVRseWJUUWlmUSJ9LCJpc3N1ZXIiOiJkaWQ6andrOmV5SmhiR2NpT2lKRlV6STFOaUlzSW5WelpTSTZJbk5wWnlJc0ltdDBlU0k2SWtWRElpd2lZM0oySWpvaVVDMHlOVFlpTENKNElqb2lWRWN5U0RKNE1tUlhXRTR6ZFVOeFduQnhSakY1YzBGUVVWWkVTa1ZPWDBndFEwMTBZbWRxWWkxT1p5SXNJbmtpT2lJNVRUaE9lR1F3VUU0eU1rMDViRkJFZUdSd1JIQnZWRXg2TVRWM1pubGFTbk0yV21oTFNWVktNek00SW4wIiwiaXNzdWFuY2VEYXRlIjoiMjAyNC0wMi0yMlQxMzo0Mjo1OC44MzVaIiwic3ViIjoiZGlkOmp3azpleUpoYkdjaU9pSkZVekkxTmtzaUxDSjFjMlVpT2lKemFXY2lMQ0pyZEhraU9pSkZReUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW5naU9pSldjWGhIZVhWUk5WUTBXVEpzZGpKSFkybE9TaTFEYURCVWFGVm1kVk5RWm0wdFJYVlNZbGRNWlVOM0lpd2llU0k2SW01T1FWQnBiR0V5VDBRNGRXOXBXbk5LVm1aUmFrbDJTMUZUZWxBelFqVlBXbVZSYkVoQ1VUbHliVFFpZlEiLCJuYmYiOjE3MDg2MDkzNzgsImlzcyI6ImRpZDpqd2s6ZXlKaGJHY2lPaUpGVXpJMU5pSXNJblZ6WlNJNkluTnBaeUlzSW10MGVTSTZJa1ZESWl3aVkzSjJJam9pVUMweU5UWWlMQ0o0SWpvaVZFY3lTREo0TW1SWFdFNHpkVU54V25CeFJqRjVjMEZRVVZaRVNrVk9YMGd0UTAxMFltZHFZaTFPWnlJc0lua2lPaUk1VFRoT2VHUXdVRTR5TWswNWJGQkVlR1J3UkhCdlZFeDZNVFYzWm5sYVNuTTJXbWhMU1ZWS016TTRJbjAifQ.GgLRWHO674wu6QF_xUGbCi_2zDD8jNf_xoWNvH5K605xvBoz6qKx0ndmxLeGQWWUA-4VuAkznf3ROcp9wpgbEw',
|
|
95
|
+
kmsKeyRef: 'testRef',
|
|
96
|
+
identifierMethod: 'did',
|
|
89
97
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
90
98
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
91
99
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
@@ -107,6 +115,8 @@ describe('Database entities tests', (): void => {
|
|
|
107
115
|
const addCredentialArgs1: AddCredentialArgs = {
|
|
108
116
|
rawDocument:
|
|
109
117
|
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw',
|
|
118
|
+
kmsKeyRef: 'testRef',
|
|
119
|
+
identifierMethod: 'did',
|
|
110
120
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
111
121
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
112
122
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
@@ -155,6 +165,8 @@ describe('Database entities tests', (): void => {
|
|
|
155
165
|
}
|
|
156
166
|
const addCredentialArgs2: AddCredentialArgs = {
|
|
157
167
|
rawDocument: JSON.stringify(sampleVP),
|
|
168
|
+
kmsKeyRef: 'testRef',
|
|
169
|
+
identifierMethod: 'did',
|
|
158
170
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
159
171
|
issuerCorrelationId: 'did:example:holder',
|
|
160
172
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
@@ -165,6 +177,8 @@ describe('Database entities tests', (): void => {
|
|
|
165
177
|
const addCredentialArgs3: AddCredentialArgs = {
|
|
166
178
|
rawDocument:
|
|
167
179
|
'eyJhbGciOiJFZERTQSIsInR5cCI6InZjK3NkLWp3dCIsImtpZCI6IiN6Nk1rdHF0WE5HOENEVVk5UHJydG9TdEZ6ZUNuaHBNbWd4WUwxZ2lrY1czQnp2TlcifQ.eyJ2Y3QiOiJJZGVudGl0eUNyZWRlbnRpYWwiLCJmYW1pbHlfbmFtZSI6IkRvZSIsInBob25lX251bWJlciI6IisxLTIwMi01NTUtMDEwMSIsImFkZHJlc3MiOnsic3RyZWV0X2FkZHJlc3MiOiIxMjMgTWFpbiBTdCIsImxvY2FsaXR5IjoiQW55dG93biIsIl9zZCI6WyJOSm5tY3QwQnFCTUUxSmZCbEM2alJRVlJ1ZXZwRU9OaVl3N0E3TUh1SnlRIiwib201Wnp0WkhCLUdkMDBMRzIxQ1ZfeE00RmFFTlNvaWFPWG5UQUpOY3pCNCJdfSwiY25mIjp7Imp3ayI6eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6Im9FTlZzeE9VaUg1NFg4d0pMYVZraWNDUmswMHdCSVE0c1JnYms1NE44TW8ifX0sImlzcyI6ImRpZDprZXk6ejZNa3RxdFhORzhDRFVZOVBycnRvU3RGemVDbmhwTW1neFlMMWdpa2NXM0J6dk5XIiwiaWF0IjoxNjk4MTUxNTMyLCJfc2RfYWxnIjoic2hhLTI1NiIsIl9zZCI6WyIxQ3VyMmsyQTJvSUI1Q3NoU0lmX0FfS2ctbDI2dV9xS3VXUTc5UDBWZGFzIiwiUjF6VFV2T1lIZ2NlcGowakh5cEdIejlFSHR0VktmdDB5c3diYzlFVFBiVSIsImVEcVFwZFRYSlhiV2hmLUVzSTd6dzVYNk92WW1GTi1VWlFRTWVzWHdLUHciLCJwZERrMl9YQUtIbzdnT0Fmd0YxYjdPZENVVlRpdDJrSkhheFNFQ1E5eGZjIiwicHNhdUtVTldFaTA5bnUzQ2w4OXhLWGdtcFdFTlpsNXV5MU4xbnluX2pNayIsInNOX2dlMHBIWEY2cW1zWW5YMUE5U2R3SjhjaDhhRU5reGJPRHNUNzRZd0kiXX0.coOK8NzJmEWz4qx-qRhjo-RK7aejrSkQM9La9Cw3eWmzcja9DXrkBoQZKbIJtNoSzSPLjwK2V71W78z0miZsDQ~WyJzYWx0IiwiaXNfb3Zlcl82NSIsdHJ1ZV0~WyJzYWx0IiwiaXNfb3Zlcl8yMSIsdHJ1ZV0~WyJzYWx0IiwiZW1haWwiLCJqb2huZG9lQGV4YW1wbGUuY29tIl0~WyJzYWx0IiwiY291bnRyeSIsIlVTIl0~WyJzYWx0IiwiZ2l2ZW5fbmFtZSIsIkpvaG4iXQ~eyJhbGciOiJFZERTQSIsInR5cCI6ImtiK2p3dCJ9.eyJpYXQiOjE2OTgxNTE1MzIsIm5vbmNlIjoic2FsdCIsImF1ZCI6ImRpZDprZXk6elVDNzRWRXFxaEVIUWNndjR6YWdTUGtxRkp4dU5XdW9CUEtqSnVIRVRFVWVITG9TcVd0OTJ2aVNzbWFXank4MnkiLCJfc2RfaGFzaCI6Ii1kTUd4OGZhUnpOQm91a2EwU0R6V2JkS3JYckw1TFVmUlNQTHN2Q2xPMFkifQ.TQQLqc4ZzoKjQfAghAzC_4aaU3KCS8YqzxAJtzT124guzkv9XSHtPN8d3z181_v-ca2ATXjTRoRciozitE6wBA',
|
|
180
|
+
kmsKeyRef: 'testRef',
|
|
181
|
+
identifierMethod: 'did',
|
|
168
182
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
169
183
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
170
184
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
@@ -218,6 +232,8 @@ describe('Database entities tests', (): void => {
|
|
|
218
232
|
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw'
|
|
219
233
|
const digitalCredential: AddCredentialArgs = {
|
|
220
234
|
rawDocument: rawCredential,
|
|
235
|
+
kmsKeyRef: 'testRef',
|
|
236
|
+
identifierMethod: 'did',
|
|
221
237
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
222
238
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
223
239
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
@@ -241,6 +257,8 @@ describe('Database entities tests', (): void => {
|
|
|
241
257
|
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw'
|
|
242
258
|
const digitalCredential: AddCredentialArgs = {
|
|
243
259
|
rawDocument: rawCredential,
|
|
260
|
+
kmsKeyRef: 'testRef',
|
|
261
|
+
identifierMethod: 'did',
|
|
244
262
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
245
263
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
246
264
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
@@ -264,6 +282,8 @@ describe('Database entities tests', (): void => {
|
|
|
264
282
|
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw'
|
|
265
283
|
const digitalCredential: AddCredentialArgs = {
|
|
266
284
|
rawDocument: rawCredential,
|
|
285
|
+
kmsKeyRef: 'testRef',
|
|
286
|
+
identifierMethod: 'did',
|
|
267
287
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
268
288
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
269
289
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
@@ -287,6 +307,8 @@ describe('Database entities tests', (): void => {
|
|
|
287
307
|
'eyJraWQiOiJkaWQ6a2V5Ono2TWtyaGt5M3B1c20yNk1laUZhWFUzbjJuZWtyYW13RlVtZ0dyZUdHa0RWNnpRaiN6Nk1rcmhreTNwdXNtMjZNZWlGYVhVM24ybmVrcmFtd0ZVbWdHcmVHR2tEVjZ6UWoiLCJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vc3BoZXJlb24tb3BlbnNvdXJjZS5naXRodWIuaW8vc3NpLW1vYmlsZS13YWxsZXQvY29udGV4dC9zcGhlcmVvbi13YWxsZXQtaWRlbnRpdHktdjEuanNvbmxkIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTcGhlcmVvbldhbGxldElkZW50aXR5Q3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJmaXJzdE5hbWUiOiJTIiwibGFzdE5hbWUiOiJLIiwiZW1haWxBZGRyZXNzIjoic0BrIn19LCJzdWIiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJqdGkiOiJ1cm46dXVpZDpkZGE3YmYyNC04ZTdhLTQxZjgtYjY2Yy1hNDhkYmM1YjEwZmEiLCJuYmYiOjE3MDg0NDA4MDgsImlzcyI6ImRpZDprZXk6ejZNa3Joa3kzcHVzbTI2TWVpRmFYVTNuMm5la3JhbXdGVW1nR3JlR0drRFY2elFqIn0.G0M84XVAxSmzGY-NQuB9NBofNrINSn6lvxW6761Vlq6ypvYgtc2xNdpiRmw8ryVNfnpzrr4Z5cB1RlrC05rJAw'
|
|
288
308
|
const digitalCredential: AddCredentialArgs = {
|
|
289
309
|
rawDocument: rawCredential,
|
|
310
|
+
kmsKeyRef: 'testRef',
|
|
311
|
+
identifierMethod: 'did',
|
|
290
312
|
issuerCorrelationType: CredentialCorrelationType.DID,
|
|
291
313
|
subjectCorrelationType: CredentialCorrelationType.DID,
|
|
292
314
|
issuerCorrelationId: 'did:key:z6Mkrhky3pusm26MeiFaXU3n2nekramwFUmgGreGGkDV6zQj',
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { AbstractDigitalCredentialStore } from './AbstractDigitalCredentialStore'
|
|
2
2
|
import {
|
|
3
3
|
AddCredentialArgs,
|
|
4
|
+
CredentialRole,
|
|
5
|
+
CredentialStateType,
|
|
6
|
+
DigitalCredential,
|
|
4
7
|
GetCredentialArgs,
|
|
5
8
|
GetCredentialsArgs,
|
|
6
9
|
GetCredentialsResponse,
|
|
10
|
+
NonPersistedDigitalCredential,
|
|
7
11
|
RemoveCredentialArgs,
|
|
8
12
|
UpdateCredentialStateArgs,
|
|
9
|
-
CredentialStateType,
|
|
10
|
-
DigitalCredential,
|
|
11
|
-
NonPersistedDigitalCredential,
|
|
12
13
|
} from '../types'
|
|
13
14
|
import { OrPromise } from '@sphereon/ssi-types'
|
|
14
15
|
import { DataSource, FindOptionsOrder, Repository } from 'typeorm'
|
|
@@ -26,6 +27,7 @@ const debug: Debug.Debugger = Debug('sphereon:ssi-sdk:credential-store')
|
|
|
26
27
|
|
|
27
28
|
export class DigitalCredentialStore extends AbstractDigitalCredentialStore {
|
|
28
29
|
private readonly dbConnection: OrPromise<DataSource>
|
|
30
|
+
private dcRepo: Repository<DigitalCredentialEntity> | undefined
|
|
29
31
|
|
|
30
32
|
constructor(dbConnection: OrPromise<DataSource>) {
|
|
31
33
|
super()
|
|
@@ -34,14 +36,19 @@ export class DigitalCredentialStore extends AbstractDigitalCredentialStore {
|
|
|
34
36
|
|
|
35
37
|
addCredential = async (args: AddCredentialArgs): Promise<DigitalCredential> => {
|
|
36
38
|
debug('Adding credential', args)
|
|
37
|
-
const digitalCredentialEntityRepository: Repository<DigitalCredentialEntity> = (await this.dbConnection).getRepository(DigitalCredentialEntity)
|
|
38
39
|
const credentialEntity: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs(args)
|
|
39
|
-
const
|
|
40
|
+
const validationError = this.assertValidDigitalCredential(credentialEntity)
|
|
41
|
+
if (validationError) {
|
|
42
|
+
return Promise.reject(validationError)
|
|
43
|
+
}
|
|
44
|
+
const dcRepo = await this.getRepository()
|
|
45
|
+
const createdResult: DigitalCredentialEntity = await dcRepo.save(credentialEntity)
|
|
40
46
|
return Promise.resolve(digitalCredentialFrom(createdResult))
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
getCredential = async (args: GetCredentialArgs): Promise<DigitalCredential> => {
|
|
44
|
-
const
|
|
50
|
+
const dcRepo = await this.getRepository()
|
|
51
|
+
const result: DigitalCredentialEntity | null = await dcRepo.findOne({
|
|
45
52
|
where: args,
|
|
46
53
|
})
|
|
47
54
|
|
|
@@ -57,7 +64,8 @@ export class DigitalCredentialStore extends AbstractDigitalCredentialStore {
|
|
|
57
64
|
order && typeof order === 'string'
|
|
58
65
|
? parseAndValidateOrderOptions<DigitalCredentialEntity>(order)
|
|
59
66
|
: <FindOptionsOrder<DigitalCredentialEntity>>order
|
|
60
|
-
const
|
|
67
|
+
const dcRepo = await this.getRepository()
|
|
68
|
+
const [result, total] = await dcRepo.findAndCount({
|
|
61
69
|
where: filter,
|
|
62
70
|
skip: offset,
|
|
63
71
|
take: limit,
|
|
@@ -84,15 +92,42 @@ export class DigitalCredentialStore extends AbstractDigitalCredentialStore {
|
|
|
84
92
|
return false
|
|
85
93
|
}
|
|
86
94
|
try {
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
95
|
+
const dcRepo = await this.getRepository()
|
|
96
|
+
// TODO create a flag whether we want to delete recursively or return an error when there are child credentials?
|
|
97
|
+
const affected = await this.deleteTree(dcRepo, query)
|
|
98
|
+
return affected > 0
|
|
90
99
|
} catch (error) {
|
|
91
100
|
console.error('Error removing digital credential:', error)
|
|
92
101
|
return false
|
|
93
102
|
}
|
|
94
103
|
}
|
|
95
104
|
|
|
105
|
+
private async deleteTree(dcRepo: Repository<DigitalCredentialEntity>, query: FindOptionsWhere<DigitalCredentialEntity>): Promise<number> {
|
|
106
|
+
let affected: number = 0
|
|
107
|
+
const findResult = await dcRepo.findBy(query)
|
|
108
|
+
for (const dc of findResult) {
|
|
109
|
+
if (dc.parentId !== null && dc.parentId !== undefined) {
|
|
110
|
+
affected += await this.deleteTree(dcRepo, { id: dc.parentId })
|
|
111
|
+
}
|
|
112
|
+
const result = await dcRepo.delete(dc.id)
|
|
113
|
+
if (result.affected) {
|
|
114
|
+
affected += result.affected
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return affected
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
private async getRepository(): Promise<Repository<DigitalCredentialEntity>> {
|
|
121
|
+
if (this.dcRepo !== undefined) {
|
|
122
|
+
return Promise.resolve(this.dcRepo)
|
|
123
|
+
}
|
|
124
|
+
this.dcRepo = (await this.dbConnection).getRepository(DigitalCredentialEntity)
|
|
125
|
+
if (this.dcRepo === undefined) {
|
|
126
|
+
return Promise.reject(Error('Could not get DigitalCredentialEntity repository'))
|
|
127
|
+
}
|
|
128
|
+
return this.dcRepo
|
|
129
|
+
}
|
|
130
|
+
|
|
96
131
|
updateCredentialState = async (args: UpdateCredentialStateArgs): Promise<DigitalCredential> => {
|
|
97
132
|
const credentialRepository: Repository<DigitalCredentialEntity> = (await this.dbConnection).getRepository(DigitalCredentialEntity)
|
|
98
133
|
const whereClause: Record<string, any> = {}
|
|
@@ -123,6 +158,7 @@ export class DigitalCredentialStore extends AbstractDigitalCredentialStore {
|
|
|
123
158
|
...credential,
|
|
124
159
|
...(args.verifiedState !== CredentialStateType.REVOKED && { verifiedAt: args.verifiedAt }),
|
|
125
160
|
...(args.verifiedState === CredentialStateType.REVOKED && { revokedAt: args.revokedAt }),
|
|
161
|
+
identifierMethod: credential.identifierMethod,
|
|
126
162
|
lastUpdatedAt: new Date(),
|
|
127
163
|
verifiedState: args.verifiedState,
|
|
128
164
|
}
|
|
@@ -130,4 +166,24 @@ export class DigitalCredentialStore extends AbstractDigitalCredentialStore {
|
|
|
130
166
|
const updatedResult: DigitalCredentialEntity = await credentialRepository.save(updatedCredential, { transaction: true })
|
|
131
167
|
return digitalCredentialFrom(updatedResult)
|
|
132
168
|
}
|
|
169
|
+
|
|
170
|
+
private assertValidDigitalCredential(credentialEntity: NonPersistedDigitalCredential): Error | undefined {
|
|
171
|
+
const { kmsKeyRef, identifierMethod, credentialRole, isIssuerSigned } = credentialEntity
|
|
172
|
+
|
|
173
|
+
const isRoleInvalid = credentialRole === CredentialRole.ISSUER || (credentialRole === CredentialRole.HOLDER && !isIssuerSigned)
|
|
174
|
+
|
|
175
|
+
if (isRoleInvalid && (!kmsKeyRef || !identifierMethod)) {
|
|
176
|
+
const missingFields = []
|
|
177
|
+
|
|
178
|
+
if (!kmsKeyRef) missingFields.push('kmsKeyRef')
|
|
179
|
+
if (!identifierMethod) missingFields.push('identifierMethod')
|
|
180
|
+
|
|
181
|
+
const fields = missingFields.join(' and ')
|
|
182
|
+
return new Error(
|
|
183
|
+
`DigitalCredential field(s) ${fields} is/are required for credential role ${credentialRole} with isIssuerSigned=${isIssuerSigned}.`,
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return undefined
|
|
188
|
+
}
|
|
133
189
|
}
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
CredentialStateType,
|
|
7
7
|
DigitalCredential,
|
|
8
8
|
DocumentType,
|
|
9
|
+
RegulationType,
|
|
9
10
|
} from '../../types'
|
|
10
11
|
import { typeormDate, typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'
|
|
11
12
|
|
|
@@ -14,9 +15,15 @@ export class DigitalCredentialEntity extends BaseEntity implements DigitalCreden
|
|
|
14
15
|
@PrimaryGeneratedColumn('uuid')
|
|
15
16
|
id!: string
|
|
16
17
|
|
|
18
|
+
@Column('text', { name: 'parent_id', nullable: true })
|
|
19
|
+
parentId?: string
|
|
20
|
+
|
|
17
21
|
@Column('simple-enum', { name: 'document_type', enum: DocumentType, nullable: false })
|
|
18
22
|
documentType!: DocumentType
|
|
19
23
|
|
|
24
|
+
@Column('simple-enum', { name: 'regulation_type', enum: RegulationType, nullable: false })
|
|
25
|
+
regulationType!: RegulationType
|
|
26
|
+
|
|
20
27
|
@Column('simple-enum', { name: 'document_format', enum: CredentialDocumentFormat, nullable: false })
|
|
21
28
|
documentFormat!: CredentialDocumentFormat
|
|
22
29
|
|
|
@@ -35,18 +42,33 @@ export class DigitalCredentialEntity extends BaseEntity implements DigitalCreden
|
|
|
35
42
|
@Column('text', { name: 'hash', nullable: false, unique: true })
|
|
36
43
|
hash!: string
|
|
37
44
|
|
|
45
|
+
@Column('text', { name: 'kms_key_ref', nullable: true })
|
|
46
|
+
kmsKeyRef!: string
|
|
47
|
+
|
|
48
|
+
@Column('text', { name: 'identifier_method', nullable: true })
|
|
49
|
+
identifierMethod!: string
|
|
50
|
+
|
|
38
51
|
@Column('simple-enum', { name: 'issuer_correlation_type', enum: CredentialCorrelationType, nullable: false })
|
|
39
52
|
issuerCorrelationType!: CredentialCorrelationType
|
|
40
53
|
|
|
41
54
|
@Column('simple-enum', { name: 'subject_correlation_type', enum: CredentialCorrelationType, nullable: true })
|
|
42
55
|
subjectCorrelationType?: CredentialCorrelationType
|
|
43
56
|
|
|
57
|
+
@Column('simple-enum', { name: 'rp_correlation_type', enum: CredentialCorrelationType, nullable: true })
|
|
58
|
+
rpCorrelationType?: CredentialCorrelationType
|
|
59
|
+
|
|
60
|
+
@Column('boolean', { name: 'issuer_signed', nullable: true })
|
|
61
|
+
isIssuerSigned?: boolean
|
|
62
|
+
|
|
44
63
|
@Column('text', { name: 'issuer_correlation_id', nullable: false })
|
|
45
64
|
issuerCorrelationId!: string
|
|
46
65
|
|
|
47
66
|
@Column('text', { name: 'subject_correlation_id', nullable: true })
|
|
48
67
|
subjectCorrelationId?: string
|
|
49
68
|
|
|
69
|
+
@Column('text', { name: 'rp_correlation_id', nullable: true })
|
|
70
|
+
rpCorrelationId?: string
|
|
71
|
+
|
|
50
72
|
@Column('simple-enum', { name: 'verified_state', enum: CredentialStateType, nullable: true })
|
|
51
73
|
verifiedState?: CredentialStateType
|
|
52
74
|
|
|
@@ -56,6 +78,9 @@ export class DigitalCredentialEntity extends BaseEntity implements DigitalCreden
|
|
|
56
78
|
@CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })
|
|
57
79
|
createdAt!: Date
|
|
58
80
|
|
|
81
|
+
@Column({ name: 'presented_at', nullable: true, type: typeormDate() })
|
|
82
|
+
presentedAt?: Date
|
|
83
|
+
|
|
59
84
|
@UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })
|
|
60
85
|
lastUpdatedAt!: Date
|
|
61
86
|
|
|
@@ -4,7 +4,6 @@ import { AuditLoggingEvent } from '@sphereon/ssi-sdk.core'
|
|
|
4
4
|
import { OrPromise } from '@sphereon/ssi-types'
|
|
5
5
|
import { AbstractEventLoggerStore } from './AbstractEventLoggerStore'
|
|
6
6
|
import { AuditEventEntity, auditEventEntityFrom } from '../entities/eventLogger/AuditEventEntity'
|
|
7
|
-
import { auditEventFrom } from '../utils/eventLogger/MappingUtils'
|
|
8
7
|
import { GetAuditEventsArgs, StoreAuditEventArgs } from '../types'
|
|
9
8
|
|
|
10
9
|
const debug: Debugger = Debug('sphereon:ssi-sdk:event-store')
|
|
@@ -24,7 +23,7 @@ export class EventLoggerStore extends AbstractEventLoggerStore {
|
|
|
24
23
|
...(args?.filter && { where: args?.filter }),
|
|
25
24
|
})
|
|
26
25
|
|
|
27
|
-
return result.map((event: AuditEventEntity) => auditEventFrom(event))
|
|
26
|
+
return result.map((event: AuditEventEntity) => this.auditEventFrom(event))
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
storeAuditEvent = async (args: StoreAuditEventArgs): Promise<AuditLoggingEvent> => {
|
|
@@ -35,6 +34,29 @@ export class EventLoggerStore extends AbstractEventLoggerStore {
|
|
|
35
34
|
debug('Storing audit event', auditEventEntity)
|
|
36
35
|
const createdResult: AuditEventEntity = await connection.getRepository(AuditEventEntity).save(auditEventEntity)
|
|
37
36
|
|
|
38
|
-
return auditEventFrom(createdResult)
|
|
37
|
+
return this.auditEventFrom(createdResult)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private auditEventFrom = (event: AuditEventEntity): AuditLoggingEvent => {
|
|
41
|
+
return {
|
|
42
|
+
id: event.id,
|
|
43
|
+
description: event.description,
|
|
44
|
+
timestamp: event.timestamp,
|
|
45
|
+
level: event.level,
|
|
46
|
+
correlationId: event.correlationId,
|
|
47
|
+
actionType: event.actionType,
|
|
48
|
+
actionSubType: event.actionSubType,
|
|
49
|
+
initiatorType: event.initiatorType,
|
|
50
|
+
partyAlias: event.partyAlias,
|
|
51
|
+
partyCorrelationId: event.partyCorrelationId,
|
|
52
|
+
partyCorrelationType: event.partyCorrelationType,
|
|
53
|
+
subSystemType: event.subSystemType,
|
|
54
|
+
system: event.system,
|
|
55
|
+
systemAlias: event.systemAlias,
|
|
56
|
+
systemCorrelationId: event.systemCorrelationId,
|
|
57
|
+
systemCorrelationIdType: event.systemCorrelationIdType,
|
|
58
|
+
...(event.data && { data: JSON.parse(event.data) }),
|
|
59
|
+
...(event.diagnosticData && { diagnosticData: JSON.parse(event.diagnosticData) }),
|
|
60
|
+
}
|
|
39
61
|
}
|
|
40
62
|
}
|
package/src/index.ts
CHANGED
|
@@ -11,7 +11,6 @@ import { IssuerLocaleBrandingEntity, issuerLocaleBrandingEntityFrom } from '../e
|
|
|
11
11
|
import { BaseLocaleBrandingEntity } from '../entities/issuanceBranding/BaseLocaleBrandingEntity'
|
|
12
12
|
import { TextAttributesEntity } from '../entities/issuanceBranding/TextAttributesEntity'
|
|
13
13
|
import { AbstractIssuanceBrandingStore } from './AbstractIssuanceBrandingStore'
|
|
14
|
-
import { credentialBrandingFrom, issuerBrandingFrom, localeBrandingFrom } from '../utils/issuanceBranding/MappingUtils'
|
|
15
14
|
import {
|
|
16
15
|
IAddCredentialBrandingArgs,
|
|
17
16
|
IAddCredentialLocaleBrandingArgs,
|
|
@@ -31,6 +30,7 @@ import {
|
|
|
31
30
|
IIssuerBrandingFilter,
|
|
32
31
|
IIssuerLocaleBranding,
|
|
33
32
|
IIssuerLocaleBrandingFilter,
|
|
33
|
+
ILocaleBranding,
|
|
34
34
|
IRemoveCredentialBrandingArgs,
|
|
35
35
|
IRemoveCredentialLocaleBrandingArgs,
|
|
36
36
|
IRemoveIssuerBrandingArgs,
|
|
@@ -42,7 +42,6 @@ import {
|
|
|
42
42
|
ICredentialBrandingFilter,
|
|
43
43
|
} from '../types'
|
|
44
44
|
|
|
45
|
-
|
|
46
45
|
const debug: Debug.Debugger = Debug('sphereon:ssi-sdk:issuance-branding-store')
|
|
47
46
|
|
|
48
47
|
export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
@@ -72,7 +71,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
72
71
|
debug('Adding credential branding', credentialBrandingEntity)
|
|
73
72
|
const createdResult: CredentialBrandingEntity = await repository.save(credentialBrandingEntity)
|
|
74
73
|
|
|
75
|
-
return credentialBrandingFrom(createdResult)
|
|
74
|
+
return this.credentialBrandingFrom(createdResult)
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
public getCredentialBranding = async (args?: IGetCredentialBrandingArgs): Promise<Array<ICredentialBranding>> => {
|
|
@@ -90,7 +89,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
90
89
|
...(filter && { where: filter }),
|
|
91
90
|
})
|
|
92
91
|
|
|
93
|
-
return result.map((credentialBranding: CredentialBrandingEntity) => credentialBrandingFrom(credentialBranding))
|
|
92
|
+
return result.map((credentialBranding: CredentialBrandingEntity) => this.credentialBrandingFrom(credentialBranding))
|
|
94
93
|
}
|
|
95
94
|
|
|
96
95
|
public removeCredentialBranding = async (args: IRemoveCredentialBrandingArgs): Promise<void> => {
|
|
@@ -134,7 +133,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
134
133
|
debug('Updating credential branding', branding)
|
|
135
134
|
const result: CredentialBrandingEntity = await repository.save(branding, { transaction: true })
|
|
136
135
|
|
|
137
|
-
return credentialBrandingFrom(result)
|
|
136
|
+
return this.credentialBrandingFrom(result)
|
|
138
137
|
}
|
|
139
138
|
|
|
140
139
|
public addCredentialLocaleBranding = async (args: IAddCredentialLocaleBrandingArgs): Promise<ICredentialBranding> => {
|
|
@@ -189,7 +188,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
189
188
|
return Promise.reject(Error('Unable to get updated credential branding'))
|
|
190
189
|
}
|
|
191
190
|
|
|
192
|
-
return credentialBrandingFrom(result)
|
|
191
|
+
return this.credentialBrandingFrom(result)
|
|
193
192
|
}
|
|
194
193
|
|
|
195
194
|
public getCredentialLocaleBranding = async (args?: IGetCredentialLocaleBrandingArgs): Promise<Array<ICredentialLocaleBranding>> => {
|
|
@@ -212,7 +211,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
212
211
|
return credentialBrandingLocale
|
|
213
212
|
? credentialBrandingLocale.map(
|
|
214
213
|
(credentialLocaleBranding: CredentialLocaleBrandingEntity) =>
|
|
215
|
-
localeBrandingFrom(credentialLocaleBranding) as ICredentialLocaleBranding,
|
|
214
|
+
this.localeBrandingFrom(credentialLocaleBranding) as ICredentialLocaleBranding,
|
|
216
215
|
)
|
|
217
216
|
: []
|
|
218
217
|
}
|
|
@@ -260,7 +259,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
260
259
|
debug('Updating credential locale branding', localeBranding)
|
|
261
260
|
const updatedResult: CredentialLocaleBrandingEntity = await repository.save(localeBranding, { transaction: true })
|
|
262
261
|
|
|
263
|
-
return localeBrandingFrom(updatedResult) as ICredentialLocaleBranding
|
|
262
|
+
return this.localeBrandingFrom(updatedResult) as ICredentialLocaleBranding
|
|
264
263
|
}
|
|
265
264
|
|
|
266
265
|
public addIssuerBranding = async (args: IAddIssuerBrandingArgs): Promise<IIssuerBranding> => {
|
|
@@ -282,7 +281,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
282
281
|
debug('Adding issuer branding', issuerBrandingEntity)
|
|
283
282
|
const createdResult: IssuerBrandingEntity = await repository.save(issuerBrandingEntity)
|
|
284
283
|
|
|
285
|
-
return issuerBrandingFrom(createdResult)
|
|
284
|
+
return this.issuerBrandingFrom(createdResult)
|
|
286
285
|
}
|
|
287
286
|
|
|
288
287
|
public getIssuerBranding = async (args?: IGetIssuerBrandingArgs): Promise<Array<IIssuerBranding>> => {
|
|
@@ -300,7 +299,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
300
299
|
...(filter && { where: filter }),
|
|
301
300
|
})
|
|
302
301
|
|
|
303
|
-
return result.map((issuerBranding: IssuerBrandingEntity) => issuerBrandingFrom(issuerBranding))
|
|
302
|
+
return result.map((issuerBranding: IssuerBrandingEntity) => this.issuerBrandingFrom(issuerBranding))
|
|
304
303
|
}
|
|
305
304
|
|
|
306
305
|
public removeIssuerBranding = async (args: IRemoveIssuerBrandingArgs): Promise<void> => {
|
|
@@ -344,7 +343,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
344
343
|
debug('Updating issuer branding', branding)
|
|
345
344
|
const result: IssuerBrandingEntity = await repository.save(branding, { transaction: true })
|
|
346
345
|
|
|
347
|
-
return issuerBrandingFrom(result)
|
|
346
|
+
return this.issuerBrandingFrom(result)
|
|
348
347
|
}
|
|
349
348
|
|
|
350
349
|
public addIssuerLocaleBranding = async (args: IAddIssuerLocaleBrandingArgs): Promise<IIssuerBranding> => {
|
|
@@ -395,7 +394,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
395
394
|
return Promise.reject(Error('Unable to get updated issuer branding'))
|
|
396
395
|
}
|
|
397
396
|
|
|
398
|
-
return issuerBrandingFrom(result)
|
|
397
|
+
return this.issuerBrandingFrom(result)
|
|
399
398
|
}
|
|
400
399
|
|
|
401
400
|
public getIssuerLocaleBranding = async (args?: IGetIssuerLocaleBrandingArgs): Promise<Array<IIssuerLocaleBranding>> => {
|
|
@@ -417,7 +416,7 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
417
416
|
|
|
418
417
|
return issuerLocaleBranding
|
|
419
418
|
? issuerLocaleBranding.map(
|
|
420
|
-
(issuerLocaleBranding: IssuerLocaleBrandingEntity) => localeBrandingFrom(issuerLocaleBranding) as IIssuerLocaleBranding,
|
|
419
|
+
(issuerLocaleBranding: IssuerLocaleBrandingEntity) => this.localeBrandingFrom(issuerLocaleBranding) as IIssuerLocaleBranding,
|
|
421
420
|
)
|
|
422
421
|
: []
|
|
423
422
|
}
|
|
@@ -463,7 +462,56 @@ export class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {
|
|
|
463
462
|
debug('Updating issuer locale branding', localeBranding)
|
|
464
463
|
const updatedResult: IssuerLocaleBrandingEntity = await repository.save(localeBranding, { transaction: true })
|
|
465
464
|
|
|
466
|
-
return localeBrandingFrom(updatedResult) as IIssuerLocaleBranding
|
|
465
|
+
return this.localeBrandingFrom(updatedResult) as IIssuerLocaleBranding
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
private credentialBrandingFrom = (credentialBranding: CredentialBrandingEntity): ICredentialBranding => {
|
|
469
|
+
const result: ICredentialBranding = {
|
|
470
|
+
...credentialBranding,
|
|
471
|
+
localeBranding: credentialBranding.localeBranding.map((localeBranding: BaseLocaleBrandingEntity) => this.localeBrandingFrom(localeBranding)),
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
return this.replaceNullWithUndefined(result)
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
private issuerBrandingFrom = (issuerBranding: IssuerBrandingEntity): IIssuerBranding => {
|
|
478
|
+
const result: IIssuerBranding = {
|
|
479
|
+
...issuerBranding,
|
|
480
|
+
localeBranding: issuerBranding.localeBranding.map((localeBranding: BaseLocaleBrandingEntity) => this.localeBrandingFrom(localeBranding)),
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
return this.replaceNullWithUndefined(result)
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
private localeBrandingFrom = (localeBranding: BaseLocaleBrandingEntity): ILocaleBranding => {
|
|
487
|
+
const result: ILocaleBranding = {
|
|
488
|
+
...localeBranding,
|
|
489
|
+
locale: localeBranding.locale === '' ? undefined : localeBranding.locale,
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
return this.replaceNullWithUndefined(result)
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
private replaceNullWithUndefined(obj: any): any {
|
|
496
|
+
if (obj === null) {
|
|
497
|
+
return undefined
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
if (typeof obj !== 'object' || obj instanceof Date) {
|
|
501
|
+
return obj
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
if (Array.isArray(obj)) {
|
|
505
|
+
return obj.map((value: any) => this.replaceNullWithUndefined(value))
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
const result: any = {}
|
|
509
|
+
for (const key in obj) {
|
|
510
|
+
if (obj.hasOwnProperty(key)) {
|
|
511
|
+
result[key] = this.replaceNullWithUndefined(obj[key])
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
return result
|
|
467
515
|
}
|
|
468
516
|
|
|
469
517
|
private hasDuplicateLocales = async (localeBranding: Array<IBasicCredentialLocaleBranding | IBasicIssuerLocaleBranding>): Promise<boolean> => {
|
|
@@ -5,34 +5,46 @@ export class CreateDigitalCredential1708525189001 implements MigrationInterface
|
|
|
5
5
|
|
|
6
6
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
7
7
|
await queryRunner.query(`CREATE TYPE "digital_document_type" AS ENUM('VC', 'VP', 'C', 'P')`)
|
|
8
|
-
await queryRunner.query(`CREATE TYPE "
|
|
8
|
+
await queryRunner.query(`CREATE TYPE "digital_regulation_type" AS ENUM('PID', 'QEAA', 'EAA', 'NON_REGULATED')`)
|
|
9
|
+
await queryRunner.query(`CREATE TYPE "digital_credential_document_format" AS ENUM('JSON_LD', 'JWT', 'SD_JWT', 'MSO_MDOC')`)
|
|
9
10
|
await queryRunner.query(`CREATE TYPE "digital_credential_credential_role" AS ENUM('ISSUER', 'VERIFIER', 'HOLDER')`)
|
|
10
|
-
await queryRunner.query(`CREATE TYPE "digital_credential_correlation_type" AS ENUM('DID', 'URL', '
|
|
11
|
+
await queryRunner.query(`CREATE TYPE "digital_credential_correlation_type" AS ENUM('DID', 'KID', 'URL', 'X509_SAN')`)
|
|
11
12
|
await queryRunner.query(`CREATE TYPE "digital_credential_state_type" AS ENUM('REVOKED', 'VERIFIED', 'EXPIRED')`)
|
|
12
13
|
|
|
14
|
+
// TODO FK for parent
|
|
15
|
+
|
|
13
16
|
await queryRunner.query(`
|
|
14
17
|
CREATE TABLE "DigitalCredential" (
|
|
15
18
|
"id" uuid NOT NULL DEFAULT uuid_generate_v4(),
|
|
19
|
+
"parent_id" text,
|
|
16
20
|
"document_type" "digital_document_type" NOT NULL,
|
|
21
|
+
"regulation_type" "digital_regulation_type" NOT NULL DEFAULT 'NON_REGULATED'::"digital_regulation_type",
|
|
17
22
|
"document_format" "digital_credential_document_format" NOT NULL,
|
|
18
23
|
"credential_role" "digital_credential_credential_role" NOT NULL,
|
|
19
24
|
"raw_document" text NOT NULL,
|
|
20
25
|
"uniform_document" text NOT NULL,
|
|
21
26
|
"credential_id" text,
|
|
22
|
-
"hash" text NOT NULL
|
|
27
|
+
"hash" text NOT NULL,
|
|
28
|
+
"kms_key_ref" text,
|
|
29
|
+
"identifier_method" text,
|
|
23
30
|
"issuer_correlation_type" "digital_credential_correlation_type" NOT NULL,
|
|
24
31
|
"subject_correlation_type" "digital_credential_correlation_type",
|
|
25
32
|
"issuer_correlation_id" text NOT NULL,
|
|
26
33
|
"subject_correlation_id" text,
|
|
27
34
|
"verified_state" "digital_credential_state_type",
|
|
35
|
+
"issuer_signed" boolean,
|
|
36
|
+
"rp_correlation_id" text,
|
|
37
|
+
"rp_correlation_type" "digital_credential_correlation_type",
|
|
28
38
|
"tenant_id" text,
|
|
29
39
|
"created_at" TIMESTAMP NOT NULL DEFAULT now(),
|
|
30
40
|
"last_updated_at" TIMESTAMP NOT NULL DEFAULT now(),
|
|
41
|
+
"presented_at" DATE,
|
|
31
42
|
"valid_from" DATE,
|
|
32
43
|
"valid_until" DATE,
|
|
33
44
|
"verified_at" DATE,
|
|
34
45
|
"revoked_at" DATE,
|
|
35
|
-
PRIMARY KEY ("id")
|
|
46
|
+
PRIMARY KEY ("id"),
|
|
47
|
+
UNIQUE ("hash", "credential_role")
|
|
36
48
|
)
|
|
37
49
|
`)
|
|
38
50
|
}
|
|
@@ -43,6 +55,7 @@ export class CreateDigitalCredential1708525189001 implements MigrationInterface
|
|
|
43
55
|
await queryRunner.query(`DROP TYPE "digital_credential_correlation_type"`)
|
|
44
56
|
await queryRunner.query(`DROP TYPE "digital_credential_document_format"`)
|
|
45
57
|
await queryRunner.query(`DROP TYPE "digital_credential_credential_role"`)
|
|
58
|
+
await queryRunner.query(`DROP TYPE "digital_regulation_type"`)
|
|
46
59
|
await queryRunner.query(`DROP TYPE "digital_document_type"`)
|
|
47
60
|
}
|
|
48
61
|
}
|
|
@@ -4,28 +4,38 @@ export class CreateDigitalCredential1708525189002 implements MigrationInterface
|
|
|
4
4
|
name = 'CreateDigitalCredential1708525189002'
|
|
5
5
|
|
|
6
6
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
7
|
+
// TODO FK for parent
|
|
7
8
|
await queryRunner.query(`
|
|
8
9
|
CREATE TABLE "DigitalCredential" (
|
|
9
10
|
"id" varchar PRIMARY KEY NOT NULL,
|
|
11
|
+
"parent_id" text,
|
|
10
12
|
"document_type" varchar CHECK( "document_type" IN ('VC', 'VP', 'C', 'P') ) NOT NULL,
|
|
11
|
-
"
|
|
13
|
+
"regulation_type" varchar CHECK( "regulation_type" IN ('PID', 'QEAA', 'EAA', 'NON_REGULATED') ) NOT NULL DEFAULT 'NON_REGULATED',
|
|
14
|
+
"document_format" varchar CHECK( "document_format" IN ('JSON_LD', 'JWT', 'SD_JWT', 'MSO_MDOC') ) NOT NULL,
|
|
12
15
|
"credential_role" varchar CHECK( "credential_role" IN ('ISSUER', 'VERIFIER', 'HOLDER') ) NOT NULL,
|
|
13
16
|
"raw_document" text NOT NULL,
|
|
14
17
|
"uniform_document" text NOT NULL,
|
|
15
18
|
"credential_id" text,
|
|
16
|
-
"hash" text NOT NULL
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
+
"hash" text NOT NULL,
|
|
20
|
+
"kms_key_ref" text,
|
|
21
|
+
"identifier_method" text,
|
|
22
|
+
"issuer_correlation_type" varchar CHECK( "issuer_correlation_type" IN ('DID', 'KID', 'URL', 'X509_SAN') ) NOT NULL,
|
|
23
|
+
"subject_correlation_type" varchar CHECK( "subject_correlation_type" IN ('DID', 'KID', 'URL', 'X509_SAN') ),
|
|
19
24
|
"issuer_correlation_id" text NOT NULL,
|
|
20
25
|
"subject_correlation_id" text,
|
|
26
|
+
"issuer_signed" boolean,
|
|
27
|
+
"rp_correlation_id" text,
|
|
28
|
+
"rp_correlation_type" varchar CHECK( "issuer_correlation_type" IN ('DID', 'KID', 'URL', 'X509_SAN') ),
|
|
21
29
|
"verified_state" varchar CHECK( "verified_state" IN ('REVOKED', 'VERIFIED', 'EXPIRED') ),
|
|
22
30
|
"tenant_id" text,
|
|
23
31
|
"created_at" datetime NOT NULL DEFAULT (datetime('now')),
|
|
24
32
|
"last_updated_at" datetime NOT NULL DEFAULT (datetime('now')),
|
|
33
|
+
"presented_at" datetime,
|
|
25
34
|
"valid_from" datetime,
|
|
26
35
|
"valid_until" datetime,
|
|
27
36
|
"verified_at" datetime,
|
|
28
|
-
"revoked_at" datetime
|
|
37
|
+
"revoked_at" datetime,
|
|
38
|
+
UNIQUE ("hash", "credential_role")
|
|
29
39
|
)
|
|
30
40
|
`)
|
|
31
41
|
}
|