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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +77 -77
  3. package/dist/contact/ContactStore.d.ts.map +1 -1
  4. package/dist/digitalCredential/DigitalCredentialStore.d.ts.map +1 -1
  5. package/dist/eventLogger/EventLoggerStore.d.ts.map +1 -1
  6. package/dist/issuanceBranding/IssuanceBrandingStore.d.ts.map +1 -1
  7. package/dist/migrations/internal-migrations-ormconfig.d.ts.map +1 -1
  8. package/dist/migrations/postgres/1708525189001-CreateDigitalCredential.js +33 -33
  9. package/dist/migrations/postgres/1708797018115-CreateMachineStateStore.js +16 -16
  10. package/dist/migrations/postgres/1715761125001-CreateContacts.js +33 -33
  11. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.js +12 -12
  12. package/dist/migrations/sqlite/1708525189002-CreateDigitalCredential.js +32 -32
  13. package/dist/migrations/sqlite/1708796002272-CreateMachineStateStore.js +15 -15
  14. package/dist/migrations/sqlite/1710438363002-CreateContacts.js +13 -13
  15. package/dist/migrations/sqlite/1715761125002-CreateContacts.js +32 -32
  16. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.js +9 -9
  17. package/dist/presentationDefinition/PDStore.d.ts.map +1 -1
  18. package/dist/utils/SortingUtils.d.ts.map +1 -1
  19. package/dist/utils/contact/MappingUtils.d.ts.map +1 -1
  20. package/dist/utils/digitalCredential/MappingUtils.d.ts.map +1 -1
  21. package/dist/utils/digitalCredential/MappingUtils.js +4 -4
  22. package/dist/utils/digitalCredential/MappingUtils.js.map +1 -1
  23. package/dist/utils/presentationDefinition/MappingUtils.js +2 -2
  24. package/dist/utils/presentationDefinition/MappingUtils.js.map +1 -1
  25. package/package.json +8 -8
  26. package/src/__tests__/contact.entities.test.ts +2642 -2642
  27. package/src/__tests__/contact.store.test.ts +2649 -2649
  28. package/src/__tests__/digitalCredential.entities.test.ts +274 -274
  29. package/src/__tests__/digitalCredential.store.test.ts +330 -330
  30. package/src/__tests__/eventLogger.entities.test.ts +76 -76
  31. package/src/__tests__/eventLogger.store.test.ts +130 -130
  32. package/src/__tests__/issuanceBranding.entities.test.ts +846 -846
  33. package/src/__tests__/issuanceBranding.store.test.ts +1886 -1886
  34. package/src/__tests__/machineState.entities.test.ts +53 -53
  35. package/src/__tests__/machineState.store.test.ts +176 -176
  36. package/src/__tests__/pd-manager.entities.test.ts +73 -73
  37. package/src/__tests__/pd-manager.store.test.ts +193 -193
  38. package/src/contact/AbstractContactStore.ts +71 -71
  39. package/src/contact/ContactStore.ts +768 -768
  40. package/src/digitalCredential/AbstractDigitalCredentialStore.ts +21 -21
  41. package/src/digitalCredential/DigitalCredentialStore.ts +189 -189
  42. package/src/entities/contact/BaseContactEntity.ts +51 -51
  43. package/src/entities/contact/ConnectionEntity.ts +35 -35
  44. package/src/entities/contact/ContactMetadataItemEntity.ts +51 -51
  45. package/src/entities/contact/CorrelationIdentifierEntity.ts +43 -43
  46. package/src/entities/contact/DidAuthConfigEntity.ts +20 -20
  47. package/src/entities/contact/ElectronicAddressEntity.ts +70 -70
  48. package/src/entities/contact/IdentityEntity.ts +107 -107
  49. package/src/entities/contact/IdentityMetadataItemEntity.ts +48 -48
  50. package/src/entities/contact/NaturalPersonEntity.ts +44 -44
  51. package/src/entities/contact/OpenIdConfigEntity.ts +32 -32
  52. package/src/entities/contact/OrganizationEntity.ts +35 -35
  53. package/src/entities/contact/PartyEntity.ts +117 -117
  54. package/src/entities/contact/PartyRelationshipEntity.ts +68 -68
  55. package/src/entities/contact/PartyTypeEntity.ts +63 -63
  56. package/src/entities/contact/PhysicalAddressEntity.ts +95 -95
  57. package/src/entities/digitalCredential/DigitalCredentialEntity.ts +98 -98
  58. package/src/entities/eventLogger/AuditEventEntity.ts +92 -92
  59. package/src/entities/issuanceBranding/BackgroundAttributesEntity.ts +42 -42
  60. package/src/entities/issuanceBranding/BaseLocaleBrandingEntity.ts +87 -87
  61. package/src/entities/issuanceBranding/CredentialBrandingEntity.ts +79 -79
  62. package/src/entities/issuanceBranding/CredentialLocaleBrandingEntity.ts +33 -33
  63. package/src/entities/issuanceBranding/ImageAttributesEntity.ts +57 -57
  64. package/src/entities/issuanceBranding/ImageDimensionsEntity.ts +22 -22
  65. package/src/entities/issuanceBranding/IssuerBrandingEntity.ts +73 -73
  66. package/src/entities/issuanceBranding/IssuerLocaleBrandingEntity.ts +33 -33
  67. package/src/entities/issuanceBranding/TextAttributesEntity.ts +31 -31
  68. package/src/entities/machineState/MachineStateInfoEntity.ts +59 -59
  69. package/src/entities/presentationDefinition/PresentationDefinitionItemEntity.ts +44 -44
  70. package/src/entities/statusList2021/StatusList2021Entity.ts +96 -96
  71. package/src/entities/statusList2021/StatusList2021EntryEntity.ts +29 -29
  72. package/src/eventLogger/AbstractEventLoggerStore.ts +7 -7
  73. package/src/eventLogger/EventLoggerStore.ts +62 -62
  74. package/src/index.ts +160 -160
  75. package/src/issuanceBranding/IssuanceBrandingStore.ts +559 -559
  76. package/src/machineState/IAbstractMachineStateStore.ts +65 -65
  77. package/src/machineState/MachineStateStore.ts +149 -149
  78. package/src/migrations/generic/1-CreateContacts.ts +66 -66
  79. package/src/migrations/generic/10-CreatePresentationDefinitions.ts +66 -66
  80. package/src/migrations/generic/2-CreateIssuanceBranding.ts +64 -64
  81. package/src/migrations/generic/3-CreateContacts.ts +66 -66
  82. package/src/migrations/generic/4-CreateStatusList.ts +54 -54
  83. package/src/migrations/generic/5-CreateAuditEvents.ts +66 -66
  84. package/src/migrations/generic/6-CreateDigitalCredential.ts +66 -66
  85. package/src/migrations/generic/7-CreateMachineStateStore.ts +66 -66
  86. package/src/migrations/generic/8-CreateContacts.ts +66 -66
  87. package/src/migrations/generic/9-CreateContacts.ts +66 -66
  88. package/src/migrations/generic/index.ts +43 -43
  89. package/src/migrations/index.ts +10 -10
  90. package/src/migrations/postgres/1659463079428-CreateContacts.ts +63 -63
  91. package/src/migrations/postgres/1685628974232-CreateIssuanceBranding.ts +85 -85
  92. package/src/migrations/postgres/1690925872592-CreateContacts.ts +158 -158
  93. package/src/migrations/postgres/1693866470001-CreateStatusList.ts +24 -24
  94. package/src/migrations/postgres/1701634812183-CreateAuditEvents.ts +33 -33
  95. package/src/migrations/postgres/1708525189001-CreateDigitalCredential.ts +61 -61
  96. package/src/migrations/postgres/1708797018115-CreateMachineStateStore.ts +29 -29
  97. package/src/migrations/postgres/1710438363001-CreateContacts.ts +63 -63
  98. package/src/migrations/postgres/1715761125001-CreateContacts.ts +60 -60
  99. package/src/migrations/postgres/1716475165345-CreatePresentationDefinitions.ts +25 -25
  100. package/src/migrations/sqlite/1659463069549-CreateContacts.ts +110 -110
  101. package/src/migrations/sqlite/1685628973231-CreateIssuanceBranding.ts +119 -119
  102. package/src/migrations/sqlite/1690925872693-CreateContacts.ts +228 -228
  103. package/src/migrations/sqlite/1693866470000-CreateStatusList.ts +24 -24
  104. package/src/migrations/sqlite/1701634819487-CreateAuditEvents.ts +15 -15
  105. package/src/migrations/sqlite/1708525189002-CreateDigitalCredential.ts +46 -46
  106. package/src/migrations/sqlite/1708796002272-CreateMachineStateStore.ts +28 -28
  107. package/src/migrations/sqlite/1710438363002-CreateContacts.ts +83 -83
  108. package/src/migrations/sqlite/1715761125002-CreateContacts.ts +59 -59
  109. package/src/migrations/sqlite/1716475165344-CreatePresentationDefinitions.ts +24 -24
  110. package/src/presentationDefinition/AbstractPDStore.ts +20 -20
  111. package/src/presentationDefinition/PDStore.ts +185 -185
  112. package/src/statusList/IStatusListStore.ts +44 -44
  113. package/src/statusList/StatusListStore.ts +236 -236
  114. package/src/types/contact/IAbstractContactStore.ts +161 -161
  115. package/src/types/contact/contact.ts +295 -295
  116. package/src/types/digitalCredential/IAbstractDigitalCredentialStore.ts +42 -42
  117. package/src/types/digitalCredential/digitalCredential.ts +102 -102
  118. package/src/types/eventLogger/IAbstractEventLoggerStore.ts +12 -12
  119. package/src/types/eventLogger/eventLogger.ts +3 -3
  120. package/src/types/index.ts +14 -14
  121. package/src/types/machineState/IAbstractMachineStateStore.ts +68 -68
  122. package/src/types/presentationDefinition/IAbstractPDStore.ts +25 -25
  123. package/src/types/presentationDefinition/presentationDefinition.ts +17 -17
  124. package/src/utils/SortingUtils.ts +16 -16
  125. package/src/utils/contact/MappingUtils.ts +506 -506
  126. package/src/utils/digitalCredential/MappingUtils.ts +160 -160
  127. package/src/utils/hasher.ts +19 -19
  128. package/src/utils/presentationDefinition/MappingUtils.ts +52 -52
  129. package/dist/entities/contact/IMetadataEntity.d.ts +0 -8
  130. package/dist/entities/contact/IMetadataEntity.d.ts.map +0 -1
  131. package/dist/entities/contact/IMetadataEntity.js +0 -2
  132. package/dist/entities/contact/IMetadataEntity.js.map +0 -1
  133. package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts +0 -7
  134. package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts.map +0 -1
  135. package/dist/migrations/generic/8-CreatePresentationDefinitions.js +0 -78
  136. package/dist/migrations/generic/8-CreatePresentationDefinitions.js.map +0 -1
@@ -1,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
+ }