@sphereon/ssi-sdk.data-store 0.30.1-unstable.4 → 0.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -201
- package/README.md +77 -77
- package/dist/contact/ContactStore.d.ts.map +1 -1
- package/dist/digitalCredential/DigitalCredentialStore.d.ts.map +1 -1
- package/dist/eventLogger/EventLoggerStore.d.ts.map +1 -1
- package/dist/issuanceBranding/IssuanceBrandingStore.d.ts.map +1 -1
- package/dist/migrations/internal-migrations-ormconfig.d.ts.map +1 -1
- package/dist/migrations/postgres/1708525189001-CreateDigitalCredential.js +33 -33
- package/dist/migrations/postgres/1708797018115-CreateMachineStateStore.js +16 -16
- package/dist/migrations/postgres/1715761125001-CreateContacts.js +33 -33
- package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.js +12 -12
- package/dist/migrations/sqlite/1708525189002-CreateDigitalCredential.js +32 -32
- package/dist/migrations/sqlite/1708796002272-CreateMachineStateStore.js +15 -15
- package/dist/migrations/sqlite/1710438363002-CreateContacts.js +13 -13
- package/dist/migrations/sqlite/1715761125002-CreateContacts.js +32 -32
- package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.js +9 -9
- package/dist/presentationDefinition/PDStore.d.ts.map +1 -1
- package/dist/utils/SortingUtils.d.ts.map +1 -1
- package/dist/utils/contact/MappingUtils.d.ts.map +1 -1
- package/dist/utils/digitalCredential/MappingUtils.d.ts.map +1 -1
- package/dist/utils/digitalCredential/MappingUtils.js +4 -4
- package/dist/utils/digitalCredential/MappingUtils.js.map +1 -1
- package/dist/utils/presentationDefinition/MappingUtils.js +2 -2
- package/dist/utils/presentationDefinition/MappingUtils.js.map +1 -1
- package/package.json +8 -8
- package/src/__tests__/contact.entities.test.ts +2642 -2642
- package/src/__tests__/contact.store.test.ts +2649 -2649
- package/src/__tests__/digitalCredential.entities.test.ts +274 -274
- package/src/__tests__/digitalCredential.store.test.ts +330 -330
- package/src/__tests__/eventLogger.entities.test.ts +76 -76
- package/src/__tests__/eventLogger.store.test.ts +130 -130
- package/src/__tests__/issuanceBranding.entities.test.ts +846 -846
- package/src/__tests__/issuanceBranding.store.test.ts +1886 -1886
- package/src/__tests__/machineState.entities.test.ts +53 -53
- package/src/__tests__/machineState.store.test.ts +176 -176
- package/src/__tests__/pd-manager.entities.test.ts +73 -73
- package/src/__tests__/pd-manager.store.test.ts +193 -193
- package/src/contact/AbstractContactStore.ts +71 -71
- package/src/contact/ContactStore.ts +768 -768
- package/src/digitalCredential/AbstractDigitalCredentialStore.ts +21 -21
- package/src/digitalCredential/DigitalCredentialStore.ts +189 -189
- package/src/entities/contact/BaseContactEntity.ts +51 -51
- package/src/entities/contact/ConnectionEntity.ts +35 -35
- package/src/entities/contact/ContactMetadataItemEntity.ts +51 -51
- package/src/entities/contact/CorrelationIdentifierEntity.ts +43 -43
- package/src/entities/contact/DidAuthConfigEntity.ts +20 -20
- package/src/entities/contact/ElectronicAddressEntity.ts +70 -70
- package/src/entities/contact/IdentityEntity.ts +107 -107
- package/src/entities/contact/IdentityMetadataItemEntity.ts +48 -48
- package/src/entities/contact/NaturalPersonEntity.ts +44 -44
- package/src/entities/contact/OpenIdConfigEntity.ts +32 -32
- package/src/entities/contact/OrganizationEntity.ts +35 -35
- package/src/entities/contact/PartyEntity.ts +117 -117
- package/src/entities/contact/PartyRelationshipEntity.ts +68 -68
- package/src/entities/contact/PartyTypeEntity.ts +63 -63
- package/src/entities/contact/PhysicalAddressEntity.ts +95 -95
- package/src/entities/digitalCredential/DigitalCredentialEntity.ts +98 -98
- package/src/entities/eventLogger/AuditEventEntity.ts +92 -92
- package/src/entities/issuanceBranding/BackgroundAttributesEntity.ts +42 -42
- package/src/entities/issuanceBranding/BaseLocaleBrandingEntity.ts +87 -87
- package/src/entities/issuanceBranding/CredentialBrandingEntity.ts +79 -79
- package/src/entities/issuanceBranding/CredentialLocaleBrandingEntity.ts +33 -33
- package/src/entities/issuanceBranding/ImageAttributesEntity.ts +57 -57
- package/src/entities/issuanceBranding/ImageDimensionsEntity.ts +22 -22
- package/src/entities/issuanceBranding/IssuerBrandingEntity.ts +73 -73
- package/src/entities/issuanceBranding/IssuerLocaleBrandingEntity.ts +33 -33
- package/src/entities/issuanceBranding/TextAttributesEntity.ts +31 -31
- package/src/entities/machineState/MachineStateInfoEntity.ts +59 -59
- package/src/entities/presentationDefinition/PresentationDefinitionItemEntity.ts +44 -44
- package/src/entities/statusList2021/StatusList2021Entity.ts +96 -96
- package/src/entities/statusList2021/StatusList2021EntryEntity.ts +29 -29
- package/src/eventLogger/AbstractEventLoggerStore.ts +7 -7
- package/src/eventLogger/EventLoggerStore.ts +62 -62
- package/src/index.ts +160 -160
- package/src/issuanceBranding/IssuanceBrandingStore.ts +559 -559
- package/src/machineState/IAbstractMachineStateStore.ts +65 -65
- package/src/machineState/MachineStateStore.ts +149 -149
- package/src/migrations/generic/1-CreateContacts.ts +66 -66
- package/src/migrations/generic/10-CreatePresentationDefinitions.ts +66 -66
- package/src/migrations/generic/2-CreateIssuanceBranding.ts +64 -64
- package/src/migrations/generic/3-CreateContacts.ts +66 -66
- package/src/migrations/generic/4-CreateStatusList.ts +54 -54
- package/src/migrations/generic/5-CreateAuditEvents.ts +66 -66
- package/src/migrations/generic/6-CreateDigitalCredential.ts +66 -66
- package/src/migrations/generic/7-CreateMachineStateStore.ts +66 -66
- package/src/migrations/generic/8-CreateContacts.ts +66 -66
- package/src/migrations/generic/9-CreateContacts.ts +66 -66
- package/src/migrations/generic/index.ts +43 -43
- package/src/migrations/index.ts +10 -10
- package/src/migrations/postgres/1659463079428-CreateContacts.ts +63 -63
- package/src/migrations/postgres/1685628974232-CreateIssuanceBranding.ts +85 -85
- package/src/migrations/postgres/1690925872592-CreateContacts.ts +158 -158
- package/src/migrations/postgres/1693866470001-CreateStatusList.ts +24 -24
- package/src/migrations/postgres/1701634812183-CreateAuditEvents.ts +33 -33
- package/src/migrations/postgres/1708525189001-CreateDigitalCredential.ts +61 -61
- package/src/migrations/postgres/1708797018115-CreateMachineStateStore.ts +29 -29
- package/src/migrations/postgres/1710438363001-CreateContacts.ts +63 -63
- package/src/migrations/postgres/1715761125001-CreateContacts.ts +60 -60
- package/src/migrations/postgres/1716475165345-CreatePresentationDefinitions.ts +25 -25
- package/src/migrations/sqlite/1659463069549-CreateContacts.ts +110 -110
- package/src/migrations/sqlite/1685628973231-CreateIssuanceBranding.ts +119 -119
- package/src/migrations/sqlite/1690925872693-CreateContacts.ts +228 -228
- package/src/migrations/sqlite/1693866470000-CreateStatusList.ts +24 -24
- package/src/migrations/sqlite/1701634819487-CreateAuditEvents.ts +15 -15
- package/src/migrations/sqlite/1708525189002-CreateDigitalCredential.ts +46 -46
- package/src/migrations/sqlite/1708796002272-CreateMachineStateStore.ts +28 -28
- package/src/migrations/sqlite/1710438363002-CreateContacts.ts +83 -83
- package/src/migrations/sqlite/1715761125002-CreateContacts.ts +59 -59
- package/src/migrations/sqlite/1716475165344-CreatePresentationDefinitions.ts +24 -24
- package/src/presentationDefinition/AbstractPDStore.ts +20 -20
- package/src/presentationDefinition/PDStore.ts +185 -185
- package/src/statusList/IStatusListStore.ts +44 -44
- package/src/statusList/StatusListStore.ts +236 -236
- package/src/types/contact/IAbstractContactStore.ts +161 -161
- package/src/types/contact/contact.ts +295 -295
- package/src/types/digitalCredential/IAbstractDigitalCredentialStore.ts +42 -42
- package/src/types/digitalCredential/digitalCredential.ts +102 -102
- package/src/types/eventLogger/IAbstractEventLoggerStore.ts +12 -12
- package/src/types/eventLogger/eventLogger.ts +3 -3
- package/src/types/index.ts +14 -14
- package/src/types/machineState/IAbstractMachineStateStore.ts +68 -68
- package/src/types/presentationDefinition/IAbstractPDStore.ts +25 -25
- package/src/types/presentationDefinition/presentationDefinition.ts +17 -17
- package/src/utils/SortingUtils.ts +16 -16
- package/src/utils/contact/MappingUtils.ts +506 -506
- package/src/utils/digitalCredential/MappingUtils.ts +160 -160
- package/src/utils/hasher.ts +19 -19
- package/src/utils/presentationDefinition/MappingUtils.ts +52 -52
- package/dist/entities/contact/IMetadataEntity.d.ts +0 -8
- package/dist/entities/contact/IMetadataEntity.d.ts.map +0 -1
- package/dist/entities/contact/IMetadataEntity.js +0 -2
- package/dist/entities/contact/IMetadataEntity.js.map +0 -1
- package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts +0 -7
- package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts.map +0 -1
- package/dist/migrations/generic/8-CreatePresentationDefinitions.js +0 -78
- package/dist/migrations/generic/8-CreatePresentationDefinitions.js.map +0 -1
|
@@ -1,185 +1,185 @@
|
|
|
1
|
-
import { OrPromise } from '@sphereon/ssi-types'
|
|
2
|
-
import { DataSource, In, Repository } from 'typeorm'
|
|
3
|
-
import { AbstractPDStore } from './AbstractPDStore'
|
|
4
|
-
import Debug from 'debug'
|
|
5
|
-
import {
|
|
6
|
-
DeleteDefinitionArgs,
|
|
7
|
-
DeleteDefinitionsArgs,
|
|
8
|
-
GetDefinitionArgs,
|
|
9
|
-
GetDefinitionsArgs,
|
|
10
|
-
HasDefinitionArgs,
|
|
11
|
-
HasDefinitionsArgs,
|
|
12
|
-
NonPersistedPresentationDefinitionItem,
|
|
13
|
-
PresentationDefinitionItem,
|
|
14
|
-
PresentationDefinitionItemFilter,
|
|
15
|
-
} from '../types'
|
|
16
|
-
import { PresentationDefinitionItemEntity } from '../entities/presentationDefinition/PresentationDefinitionItemEntity'
|
|
17
|
-
import { presentationDefinitionEntityItemFrom, presentationDefinitionItemFrom } from '../utils/presentationDefinition/MappingUtils'
|
|
18
|
-
|
|
19
|
-
const debug: Debug.Debugger = Debug('sphereon:ssi-sdk:pd-store')
|
|
20
|
-
|
|
21
|
-
export class PDStore extends AbstractPDStore {
|
|
22
|
-
private readonly dbConnection: OrPromise<DataSource>
|
|
23
|
-
|
|
24
|
-
constructor(dbConnection: OrPromise<DataSource>) {
|
|
25
|
-
super()
|
|
26
|
-
this.dbConnection = dbConnection
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
getDefinition = async (args: GetDefinitionArgs): Promise<PresentationDefinitionItem> => {
|
|
30
|
-
const { itemId } = args ?? {}
|
|
31
|
-
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
32
|
-
const result: PresentationDefinitionItemEntity | null = await pdRepository.findOne({
|
|
33
|
-
where: { id: itemId },
|
|
34
|
-
})
|
|
35
|
-
if (!result) {
|
|
36
|
-
return Promise.reject(Error(`No presentation definition item found for id: ${itemId}`))
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return presentationDefinitionItemFrom(result)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
hasDefinition = async (args: HasDefinitionArgs): Promise<boolean> => {
|
|
43
|
-
const { itemId } = args ?? {}
|
|
44
|
-
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
45
|
-
|
|
46
|
-
const resultCount: number = await pdRepository.count({
|
|
47
|
-
where: { id: itemId },
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
return resultCount > 0
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
hasDefinitions = async (args: HasDefinitionsArgs): Promise<boolean> => {
|
|
54
|
-
const { filter } = args
|
|
55
|
-
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
56
|
-
|
|
57
|
-
const resultCount: number = await pdRepository.count({
|
|
58
|
-
...(filter && { where: cleanFilter(filter) }),
|
|
59
|
-
})
|
|
60
|
-
return resultCount > 0
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
getDefinitions = async (args: GetDefinitionsArgs): Promise<Array<PresentationDefinitionItem>> => {
|
|
64
|
-
const { filter } = args
|
|
65
|
-
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
66
|
-
const initialResult = await this.findIds(pdRepository, filter)
|
|
67
|
-
const result: Array<PresentationDefinitionItemEntity> = await pdRepository.find({
|
|
68
|
-
where: {
|
|
69
|
-
id: In(initialResult.map((entity: PresentationDefinitionItemEntity) => entity.id)),
|
|
70
|
-
},
|
|
71
|
-
order: {
|
|
72
|
-
version: 'DESC',
|
|
73
|
-
},
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
return result.map((entity: PresentationDefinitionItemEntity) => presentationDefinitionItemFrom(entity))
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
addDefinition = async (item: NonPersistedPresentationDefinitionItem): Promise<PresentationDefinitionItem> => {
|
|
80
|
-
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
81
|
-
|
|
82
|
-
const entity: PresentationDefinitionItemEntity = presentationDefinitionEntityItemFrom(item)
|
|
83
|
-
debug('Adding presentation definition entity', item)
|
|
84
|
-
const result: PresentationDefinitionItemEntity = await pdRepository.save(entity, {
|
|
85
|
-
transaction: true,
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
return presentationDefinitionItemFrom(result)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
updateDefinition = async (item: PresentationDefinitionItem): Promise<PresentationDefinitionItem> => {
|
|
92
|
-
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
93
|
-
|
|
94
|
-
const result: PresentationDefinitionItemEntity | null = await pdRepository.findOne({
|
|
95
|
-
where: { id: item.id },
|
|
96
|
-
})
|
|
97
|
-
if (!result) {
|
|
98
|
-
return Promise.reject(Error(`No presentation definition entity found for id: ${item.id}`))
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const updatedEntity: Partial<PresentationDefinitionItemEntity> = {
|
|
102
|
-
...result,
|
|
103
|
-
}
|
|
104
|
-
updatedEntity.tenantId = item.tenantId
|
|
105
|
-
updatedEntity.definitionId = item.definitionId!
|
|
106
|
-
updatedEntity.version = item.version
|
|
107
|
-
updatedEntity.name = item.name
|
|
108
|
-
updatedEntity.purpose = item.purpose
|
|
109
|
-
updatedEntity.definitionPayload = JSON.stringify(item.definitionPayload!)
|
|
110
|
-
|
|
111
|
-
debug('Updating presentation definition entity', updatedEntity)
|
|
112
|
-
const updateResult: PresentationDefinitionItemEntity = await pdRepository.save(updatedEntity, {
|
|
113
|
-
transaction: true,
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
return presentationDefinitionItemFrom(updateResult)
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
deleteDefinition = async (args: DeleteDefinitionArgs): Promise<void> => {
|
|
120
|
-
const { itemId } = args
|
|
121
|
-
|
|
122
|
-
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
123
|
-
const entity: PresentationDefinitionItemEntity | null = await pdRepository.findOne({
|
|
124
|
-
where: { id: itemId },
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
if (!entity) {
|
|
128
|
-
return Promise.reject(Error(`No presentation definition found with id: ${itemId}`))
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
debug('Deleting presentation definition entity', entity)
|
|
132
|
-
await pdRepository.delete(entity.id)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
deleteDefinitions = async (args: DeleteDefinitionsArgs): Promise<number> => {
|
|
136
|
-
const { filter } = args
|
|
137
|
-
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
138
|
-
const initialResult = await this.findIds(pdRepository, filter)
|
|
139
|
-
|
|
140
|
-
const result: Array<PresentationDefinitionItemEntity> = await pdRepository.find({
|
|
141
|
-
where: {
|
|
142
|
-
id: In(initialResult.map((entity: PresentationDefinitionItemEntity) => entity.id)),
|
|
143
|
-
},
|
|
144
|
-
})
|
|
145
|
-
|
|
146
|
-
for (const entity of result) {
|
|
147
|
-
debug('Deleting presentation definition entity', entity.id)
|
|
148
|
-
await pdRepository.delete(entity.id)
|
|
149
|
-
}
|
|
150
|
-
return result.length
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
findIds = async (
|
|
154
|
-
pdRepository: Repository<PresentationDefinitionItemEntity>,
|
|
155
|
-
filter: Array<PresentationDefinitionItemFilter> | undefined,
|
|
156
|
-
): Promise<Array<PresentationDefinitionItemEntity>> => {
|
|
157
|
-
const idFilters = filter?.map((f) => f.id).filter((id) => id !== undefined && id !== null)
|
|
158
|
-
if (idFilters && idFilters.length > 0 && idFilters.length === filter?.length) {
|
|
159
|
-
return await pdRepository.find({
|
|
160
|
-
where: { id: In(idFilters) },
|
|
161
|
-
})
|
|
162
|
-
} else {
|
|
163
|
-
return await pdRepository.find({
|
|
164
|
-
...(filter && { where: cleanFilter(filter) }), // TODO test how mixing filters work
|
|
165
|
-
})
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const cleanFilter = (filter: Array<PresentationDefinitionItemFilter> | undefined): Array<PresentationDefinitionItemFilter> | undefined => {
|
|
171
|
-
if (filter === undefined) {
|
|
172
|
-
return undefined
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return filter.map((item) => {
|
|
176
|
-
const cleanedItem: PresentationDefinitionItemFilter = {}
|
|
177
|
-
for (const key in item) {
|
|
178
|
-
const value = item[key as keyof PresentationDefinitionItemFilter]
|
|
179
|
-
if (value !== undefined) {
|
|
180
|
-
;(cleanedItem as any)[key] = value
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return cleanedItem
|
|
184
|
-
})
|
|
185
|
-
}
|
|
1
|
+
import { OrPromise } from '@sphereon/ssi-types'
|
|
2
|
+
import { DataSource, In, Repository } from 'typeorm'
|
|
3
|
+
import { AbstractPDStore } from './AbstractPDStore'
|
|
4
|
+
import Debug from 'debug'
|
|
5
|
+
import {
|
|
6
|
+
DeleteDefinitionArgs,
|
|
7
|
+
DeleteDefinitionsArgs,
|
|
8
|
+
GetDefinitionArgs,
|
|
9
|
+
GetDefinitionsArgs,
|
|
10
|
+
HasDefinitionArgs,
|
|
11
|
+
HasDefinitionsArgs,
|
|
12
|
+
NonPersistedPresentationDefinitionItem,
|
|
13
|
+
PresentationDefinitionItem,
|
|
14
|
+
PresentationDefinitionItemFilter,
|
|
15
|
+
} from '../types'
|
|
16
|
+
import { PresentationDefinitionItemEntity } from '../entities/presentationDefinition/PresentationDefinitionItemEntity'
|
|
17
|
+
import { presentationDefinitionEntityItemFrom, presentationDefinitionItemFrom } from '../utils/presentationDefinition/MappingUtils'
|
|
18
|
+
|
|
19
|
+
const debug: Debug.Debugger = Debug('sphereon:ssi-sdk:pd-store')
|
|
20
|
+
|
|
21
|
+
export class PDStore extends AbstractPDStore {
|
|
22
|
+
private readonly dbConnection: OrPromise<DataSource>
|
|
23
|
+
|
|
24
|
+
constructor(dbConnection: OrPromise<DataSource>) {
|
|
25
|
+
super()
|
|
26
|
+
this.dbConnection = dbConnection
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
getDefinition = async (args: GetDefinitionArgs): Promise<PresentationDefinitionItem> => {
|
|
30
|
+
const { itemId } = args ?? {}
|
|
31
|
+
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
32
|
+
const result: PresentationDefinitionItemEntity | null = await pdRepository.findOne({
|
|
33
|
+
where: { id: itemId },
|
|
34
|
+
})
|
|
35
|
+
if (!result) {
|
|
36
|
+
return Promise.reject(Error(`No presentation definition item found for id: ${itemId}`))
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return presentationDefinitionItemFrom(result)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
hasDefinition = async (args: HasDefinitionArgs): Promise<boolean> => {
|
|
43
|
+
const { itemId } = args ?? {}
|
|
44
|
+
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
45
|
+
|
|
46
|
+
const resultCount: number = await pdRepository.count({
|
|
47
|
+
where: { id: itemId },
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
return resultCount > 0
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
hasDefinitions = async (args: HasDefinitionsArgs): Promise<boolean> => {
|
|
54
|
+
const { filter } = args
|
|
55
|
+
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
56
|
+
|
|
57
|
+
const resultCount: number = await pdRepository.count({
|
|
58
|
+
...(filter && { where: cleanFilter(filter) }),
|
|
59
|
+
})
|
|
60
|
+
return resultCount > 0
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
getDefinitions = async (args: GetDefinitionsArgs): Promise<Array<PresentationDefinitionItem>> => {
|
|
64
|
+
const { filter } = args
|
|
65
|
+
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
66
|
+
const initialResult = await this.findIds(pdRepository, filter)
|
|
67
|
+
const result: Array<PresentationDefinitionItemEntity> = await pdRepository.find({
|
|
68
|
+
where: {
|
|
69
|
+
id: In(initialResult.map((entity: PresentationDefinitionItemEntity) => entity.id)),
|
|
70
|
+
},
|
|
71
|
+
order: {
|
|
72
|
+
version: 'DESC',
|
|
73
|
+
},
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
return result.map((entity: PresentationDefinitionItemEntity) => presentationDefinitionItemFrom(entity))
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
addDefinition = async (item: NonPersistedPresentationDefinitionItem): Promise<PresentationDefinitionItem> => {
|
|
80
|
+
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
81
|
+
|
|
82
|
+
const entity: PresentationDefinitionItemEntity = presentationDefinitionEntityItemFrom(item)
|
|
83
|
+
debug('Adding presentation definition entity', item)
|
|
84
|
+
const result: PresentationDefinitionItemEntity = await pdRepository.save(entity, {
|
|
85
|
+
transaction: true,
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
return presentationDefinitionItemFrom(result)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
updateDefinition = async (item: PresentationDefinitionItem): Promise<PresentationDefinitionItem> => {
|
|
92
|
+
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
93
|
+
|
|
94
|
+
const result: PresentationDefinitionItemEntity | null = await pdRepository.findOne({
|
|
95
|
+
where: { id: item.id },
|
|
96
|
+
})
|
|
97
|
+
if (!result) {
|
|
98
|
+
return Promise.reject(Error(`No presentation definition entity found for id: ${item.id}`))
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const updatedEntity: Partial<PresentationDefinitionItemEntity> = {
|
|
102
|
+
...result,
|
|
103
|
+
}
|
|
104
|
+
updatedEntity.tenantId = item.tenantId
|
|
105
|
+
updatedEntity.definitionId = item.definitionId!
|
|
106
|
+
updatedEntity.version = item.version
|
|
107
|
+
updatedEntity.name = item.name
|
|
108
|
+
updatedEntity.purpose = item.purpose
|
|
109
|
+
updatedEntity.definitionPayload = JSON.stringify(item.definitionPayload!)
|
|
110
|
+
|
|
111
|
+
debug('Updating presentation definition entity', updatedEntity)
|
|
112
|
+
const updateResult: PresentationDefinitionItemEntity = await pdRepository.save(updatedEntity, {
|
|
113
|
+
transaction: true,
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
return presentationDefinitionItemFrom(updateResult)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
deleteDefinition = async (args: DeleteDefinitionArgs): Promise<void> => {
|
|
120
|
+
const { itemId } = args
|
|
121
|
+
|
|
122
|
+
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
123
|
+
const entity: PresentationDefinitionItemEntity | null = await pdRepository.findOne({
|
|
124
|
+
where: { id: itemId },
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
if (!entity) {
|
|
128
|
+
return Promise.reject(Error(`No presentation definition found with id: ${itemId}`))
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
debug('Deleting presentation definition entity', entity)
|
|
132
|
+
await pdRepository.delete(entity.id)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
deleteDefinitions = async (args: DeleteDefinitionsArgs): Promise<number> => {
|
|
136
|
+
const { filter } = args
|
|
137
|
+
const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
|
|
138
|
+
const initialResult = await this.findIds(pdRepository, filter)
|
|
139
|
+
|
|
140
|
+
const result: Array<PresentationDefinitionItemEntity> = await pdRepository.find({
|
|
141
|
+
where: {
|
|
142
|
+
id: In(initialResult.map((entity: PresentationDefinitionItemEntity) => entity.id)),
|
|
143
|
+
},
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
for (const entity of result) {
|
|
147
|
+
debug('Deleting presentation definition entity', entity.id)
|
|
148
|
+
await pdRepository.delete(entity.id)
|
|
149
|
+
}
|
|
150
|
+
return result.length
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
findIds = async (
|
|
154
|
+
pdRepository: Repository<PresentationDefinitionItemEntity>,
|
|
155
|
+
filter: Array<PresentationDefinitionItemFilter> | undefined,
|
|
156
|
+
): Promise<Array<PresentationDefinitionItemEntity>> => {
|
|
157
|
+
const idFilters = filter?.map((f) => f.id).filter((id) => id !== undefined && id !== null)
|
|
158
|
+
if (idFilters && idFilters.length > 0 && idFilters.length === filter?.length) {
|
|
159
|
+
return await pdRepository.find({
|
|
160
|
+
where: { id: In(idFilters) },
|
|
161
|
+
})
|
|
162
|
+
} else {
|
|
163
|
+
return await pdRepository.find({
|
|
164
|
+
...(filter && { where: cleanFilter(filter) }), // TODO test how mixing filters work
|
|
165
|
+
})
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const cleanFilter = (filter: Array<PresentationDefinitionItemFilter> | undefined): Array<PresentationDefinitionItemFilter> | undefined => {
|
|
171
|
+
if (filter === undefined) {
|
|
172
|
+
return undefined
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return filter.map((item) => {
|
|
176
|
+
const cleanedItem: PresentationDefinitionItemFilter = {}
|
|
177
|
+
for (const key in item) {
|
|
178
|
+
const value = item[key as keyof PresentationDefinitionItemFilter]
|
|
179
|
+
if (value !== undefined) {
|
|
180
|
+
;(cleanedItem as any)[key] = value
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return cleanedItem
|
|
184
|
+
})
|
|
185
|
+
}
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { StatusListEntryEntity } from '../entities/statusList2021/StatusList2021EntryEntity'
|
|
2
|
-
import {
|
|
3
|
-
IAddStatusListArgs,
|
|
4
|
-
IAddStatusListEntryArgs,
|
|
5
|
-
IGetStatusListArgs,
|
|
6
|
-
IGetStatusListEntriesArgs,
|
|
7
|
-
IGetStatusListEntryByCredentialIdArgs,
|
|
8
|
-
IGetStatusListEntryByIndexArgs,
|
|
9
|
-
IGetStatusListsArgs,
|
|
10
|
-
IRemoveStatusListArgs,
|
|
11
|
-
IStatusListEntryAvailableArgs,
|
|
12
|
-
IUpdateStatusListIndexArgs,
|
|
13
|
-
} from '../types'
|
|
14
|
-
import { IStatusListEntity, IStatusListEntryEntity } from '../types'
|
|
15
|
-
|
|
16
|
-
export interface IStatusListStore {
|
|
17
|
-
getStatusList(args: IGetStatusListArgs): Promise<IStatusListEntity>
|
|
18
|
-
|
|
19
|
-
getStatusLists(args: IGetStatusListsArgs): Promise<Array<IStatusListEntity>>
|
|
20
|
-
|
|
21
|
-
removeStatusList(args: IRemoveStatusListArgs): Promise<void>
|
|
22
|
-
|
|
23
|
-
addStatusList(args: IAddStatusListArgs): Promise<IStatusListEntity>
|
|
24
|
-
|
|
25
|
-
updateStatusList(args: IUpdateStatusListIndexArgs): Promise<IStatusListEntity>
|
|
26
|
-
|
|
27
|
-
availableStatusListEntries(args: IStatusListEntryAvailableArgs): Promise<number[]>
|
|
28
|
-
|
|
29
|
-
addStatusListEntry(args: IAddStatusListEntryArgs): Promise<IStatusListEntryEntity>
|
|
30
|
-
|
|
31
|
-
updateStatusListEntry(args: IAddStatusListEntryArgs): Promise<IStatusListEntryEntity>
|
|
32
|
-
|
|
33
|
-
getStatusListEntryByIndex(args: IGetStatusListEntryByIndexArgs): Promise<StatusListEntryEntity | undefined>
|
|
34
|
-
|
|
35
|
-
getStatusListEntryByCredentialId(args: IGetStatusListEntryByCredentialIdArgs): Promise<StatusListEntryEntity | undefined>
|
|
36
|
-
|
|
37
|
-
removeStatusListEntryByIndex(args: IGetStatusListEntryByIndexArgs): Promise<boolean>
|
|
38
|
-
|
|
39
|
-
removeStatusListEntryByCredentialId(args: IGetStatusListEntryByCredentialIdArgs): Promise<boolean>
|
|
40
|
-
|
|
41
|
-
getStatusListEntries(args: IGetStatusListEntriesArgs): Promise<IStatusListEntryEntity[]>
|
|
42
|
-
|
|
43
|
-
getStatusList(args: IGetStatusListArgs): Promise<IStatusListEntity>
|
|
44
|
-
}
|
|
1
|
+
import { StatusListEntryEntity } from '../entities/statusList2021/StatusList2021EntryEntity'
|
|
2
|
+
import {
|
|
3
|
+
IAddStatusListArgs,
|
|
4
|
+
IAddStatusListEntryArgs,
|
|
5
|
+
IGetStatusListArgs,
|
|
6
|
+
IGetStatusListEntriesArgs,
|
|
7
|
+
IGetStatusListEntryByCredentialIdArgs,
|
|
8
|
+
IGetStatusListEntryByIndexArgs,
|
|
9
|
+
IGetStatusListsArgs,
|
|
10
|
+
IRemoveStatusListArgs,
|
|
11
|
+
IStatusListEntryAvailableArgs,
|
|
12
|
+
IUpdateStatusListIndexArgs,
|
|
13
|
+
} from '../types'
|
|
14
|
+
import { IStatusListEntity, IStatusListEntryEntity } from '../types'
|
|
15
|
+
|
|
16
|
+
export interface IStatusListStore {
|
|
17
|
+
getStatusList(args: IGetStatusListArgs): Promise<IStatusListEntity>
|
|
18
|
+
|
|
19
|
+
getStatusLists(args: IGetStatusListsArgs): Promise<Array<IStatusListEntity>>
|
|
20
|
+
|
|
21
|
+
removeStatusList(args: IRemoveStatusListArgs): Promise<void>
|
|
22
|
+
|
|
23
|
+
addStatusList(args: IAddStatusListArgs): Promise<IStatusListEntity>
|
|
24
|
+
|
|
25
|
+
updateStatusList(args: IUpdateStatusListIndexArgs): Promise<IStatusListEntity>
|
|
26
|
+
|
|
27
|
+
availableStatusListEntries(args: IStatusListEntryAvailableArgs): Promise<number[]>
|
|
28
|
+
|
|
29
|
+
addStatusListEntry(args: IAddStatusListEntryArgs): Promise<IStatusListEntryEntity>
|
|
30
|
+
|
|
31
|
+
updateStatusListEntry(args: IAddStatusListEntryArgs): Promise<IStatusListEntryEntity>
|
|
32
|
+
|
|
33
|
+
getStatusListEntryByIndex(args: IGetStatusListEntryByIndexArgs): Promise<StatusListEntryEntity | undefined>
|
|
34
|
+
|
|
35
|
+
getStatusListEntryByCredentialId(args: IGetStatusListEntryByCredentialIdArgs): Promise<StatusListEntryEntity | undefined>
|
|
36
|
+
|
|
37
|
+
removeStatusListEntryByIndex(args: IGetStatusListEntryByIndexArgs): Promise<boolean>
|
|
38
|
+
|
|
39
|
+
removeStatusListEntryByCredentialId(args: IGetStatusListEntryByCredentialIdArgs): Promise<boolean>
|
|
40
|
+
|
|
41
|
+
getStatusListEntries(args: IGetStatusListEntriesArgs): Promise<IStatusListEntryEntity[]>
|
|
42
|
+
|
|
43
|
+
getStatusList(args: IGetStatusListArgs): Promise<IStatusListEntity>
|
|
44
|
+
}
|