@sphereon/ssi-sdk.data-store 0.24.1-unstable.9 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/LICENSE +1 -1
  2. package/dist/contact/ContactStore.d.ts +3 -0
  3. package/dist/contact/ContactStore.d.ts.map +1 -1
  4. package/dist/contact/ContactStore.js +84 -48
  5. package/dist/contact/ContactStore.js.map +1 -1
  6. package/dist/entities/contact/BaseContactEntity.d.ts +2 -0
  7. package/dist/entities/contact/BaseContactEntity.d.ts.map +1 -1
  8. package/dist/entities/contact/BaseContactEntity.js +12 -3
  9. package/dist/entities/contact/BaseContactEntity.js.map +1 -1
  10. package/dist/entities/contact/ConnectionEntity.d.ts +2 -0
  11. package/dist/entities/contact/ConnectionEntity.d.ts.map +1 -1
  12. package/dist/entities/contact/ConnectionEntity.js +8 -0
  13. package/dist/entities/contact/ConnectionEntity.js.map +1 -1
  14. package/dist/entities/contact/ContactMetadataItemEntity.d.ts +14 -0
  15. package/dist/entities/contact/ContactMetadataItemEntity.d.ts.map +1 -0
  16. package/dist/entities/contact/ContactMetadataItemEntity.js +88 -0
  17. package/dist/entities/contact/ContactMetadataItemEntity.js.map +1 -0
  18. package/dist/entities/contact/CorrelationIdentifierEntity.d.ts +2 -0
  19. package/dist/entities/contact/CorrelationIdentifierEntity.d.ts.map +1 -1
  20. package/dist/entities/contact/CorrelationIdentifierEntity.js +8 -0
  21. package/dist/entities/contact/CorrelationIdentifierEntity.js.map +1 -1
  22. package/dist/entities/contact/DidAuthConfigEntity.d.ts +2 -0
  23. package/dist/entities/contact/DidAuthConfigEntity.d.ts.map +1 -1
  24. package/dist/entities/contact/DidAuthConfigEntity.js +8 -0
  25. package/dist/entities/contact/DidAuthConfigEntity.js.map +1 -1
  26. package/dist/entities/contact/ElectronicAddressEntity.d.ts +2 -0
  27. package/dist/entities/contact/ElectronicAddressEntity.d.ts.map +1 -1
  28. package/dist/entities/contact/ElectronicAddressEntity.js +8 -0
  29. package/dist/entities/contact/ElectronicAddressEntity.js.map +1 -1
  30. package/dist/entities/contact/IMetadataEntity.d.ts +8 -0
  31. package/dist/entities/contact/IMetadataEntity.d.ts.map +1 -0
  32. package/dist/entities/contact/IMetadataEntity.js +2 -0
  33. package/dist/entities/contact/IMetadataEntity.js.map +1 -0
  34. package/dist/entities/contact/IdentityEntity.d.ts +5 -2
  35. package/dist/entities/contact/IdentityEntity.d.ts.map +1 -1
  36. package/dist/entities/contact/IdentityEntity.js +13 -0
  37. package/dist/entities/contact/IdentityEntity.js.map +1 -1
  38. package/dist/entities/contact/IdentityMetadataItemEntity.d.ts +6 -2
  39. package/dist/entities/contact/IdentityMetadataItemEntity.d.ts.map +1 -1
  40. package/dist/entities/contact/IdentityMetadataItemEntity.js +19 -3
  41. package/dist/entities/contact/IdentityMetadataItemEntity.js.map +1 -1
  42. package/dist/entities/contact/NaturalPersonEntity.d.ts +2 -0
  43. package/dist/entities/contact/NaturalPersonEntity.d.ts.map +1 -1
  44. package/dist/entities/contact/NaturalPersonEntity.js +8 -0
  45. package/dist/entities/contact/NaturalPersonEntity.js.map +1 -1
  46. package/dist/entities/contact/OpenIdConfigEntity.d.ts +2 -0
  47. package/dist/entities/contact/OpenIdConfigEntity.d.ts.map +1 -1
  48. package/dist/entities/contact/OpenIdConfigEntity.js +8 -0
  49. package/dist/entities/contact/OpenIdConfigEntity.js.map +1 -1
  50. package/dist/entities/contact/OrganizationEntity.d.ts +2 -0
  51. package/dist/entities/contact/OrganizationEntity.d.ts.map +1 -1
  52. package/dist/entities/contact/OrganizationEntity.js +8 -0
  53. package/dist/entities/contact/OrganizationEntity.js.map +1 -1
  54. package/dist/entities/contact/PartyEntity.d.ts +2 -0
  55. package/dist/entities/contact/PartyEntity.d.ts.map +1 -1
  56. package/dist/entities/contact/PartyEntity.js +8 -0
  57. package/dist/entities/contact/PartyEntity.js.map +1 -1
  58. package/dist/entities/contact/PartyRelationshipEntity.d.ts +2 -0
  59. package/dist/entities/contact/PartyRelationshipEntity.d.ts.map +1 -1
  60. package/dist/entities/contact/PartyRelationshipEntity.js +8 -0
  61. package/dist/entities/contact/PartyRelationshipEntity.js.map +1 -1
  62. package/dist/entities/contact/PartyTypeEntity.js +4 -4
  63. package/dist/entities/contact/PartyTypeEntity.js.map +1 -1
  64. package/dist/entities/contact/PhysicalAddressEntity.d.ts +2 -0
  65. package/dist/entities/contact/PhysicalAddressEntity.d.ts.map +1 -1
  66. package/dist/entities/contact/PhysicalAddressEntity.js +10 -1
  67. package/dist/entities/contact/PhysicalAddressEntity.js.map +1 -1
  68. package/dist/entities/presentationDefinition/PresentationDefinitionItemEntity.d.ts +14 -0
  69. package/dist/entities/presentationDefinition/PresentationDefinitionItemEntity.d.ts.map +1 -0
  70. package/dist/entities/presentationDefinition/PresentationDefinitionItemEntity.js +74 -0
  71. package/dist/entities/presentationDefinition/PresentationDefinitionItemEntity.js.map +1 -0
  72. package/dist/index.d.ts +10 -4
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +16 -2
  75. package/dist/index.js.map +1 -1
  76. package/dist/migrations/generic/10-CreatePresentationDefinitions.d.ts +7 -0
  77. package/dist/migrations/generic/10-CreatePresentationDefinitions.d.ts.map +1 -0
  78. package/dist/migrations/generic/10-CreatePresentationDefinitions.js +78 -0
  79. package/dist/migrations/generic/10-CreatePresentationDefinitions.js.map +1 -0
  80. package/dist/migrations/generic/8-CreateContacts.d.ts +7 -0
  81. package/dist/migrations/generic/8-CreateContacts.d.ts.map +1 -0
  82. package/dist/migrations/generic/8-CreateContacts.js +78 -0
  83. package/dist/migrations/generic/8-CreateContacts.js.map +1 -0
  84. package/dist/migrations/generic/9-CreateContacts.d.ts +7 -0
  85. package/dist/migrations/generic/9-CreateContacts.d.ts.map +1 -0
  86. package/dist/migrations/generic/9-CreateContacts.js +78 -0
  87. package/dist/migrations/generic/9-CreateContacts.js.map +1 -0
  88. package/dist/migrations/generic/index.d.ts +2 -0
  89. package/dist/migrations/generic/index.d.ts.map +1 -1
  90. package/dist/migrations/generic/index.js +12 -2
  91. package/dist/migrations/generic/index.js.map +1 -1
  92. package/dist/migrations/index.d.ts +1 -1
  93. package/dist/migrations/index.d.ts.map +1 -1
  94. package/dist/migrations/index.js +2 -1
  95. package/dist/migrations/index.js.map +1 -1
  96. package/dist/migrations/postgres/1690925872592-CreateContacts.d.ts.map +1 -1
  97. package/dist/migrations/postgres/1690925872592-CreateContacts.js +40 -3
  98. package/dist/migrations/postgres/1690925872592-CreateContacts.js.map +1 -1
  99. package/dist/migrations/postgres/1710438363001-CreateContacts.d.ts +7 -0
  100. package/dist/migrations/postgres/1710438363001-CreateContacts.d.ts.map +1 -0
  101. package/dist/migrations/postgres/1710438363001-CreateContacts.js +63 -0
  102. package/dist/migrations/postgres/1710438363001-CreateContacts.js.map +1 -0
  103. package/dist/migrations/postgres/1715761125001-CreateContacts.d.ts +7 -0
  104. package/dist/migrations/postgres/1715761125001-CreateContacts.d.ts.map +1 -0
  105. package/dist/migrations/postgres/1715761125001-CreateContacts.js +74 -0
  106. package/dist/migrations/postgres/1715761125001-CreateContacts.js.map +1 -0
  107. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.d.ts +7 -0
  108. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.d.ts.map +1 -0
  109. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.js +41 -0
  110. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.js.map +1 -0
  111. package/dist/migrations/sqlite/1690925872693-CreateContacts.d.ts.map +1 -1
  112. package/dist/migrations/sqlite/1690925872693-CreateContacts.js +40 -3
  113. package/dist/migrations/sqlite/1690925872693-CreateContacts.js.map +1 -1
  114. package/dist/migrations/sqlite/1710438363002-CreateContacts.d.ts +7 -0
  115. package/dist/migrations/sqlite/1710438363002-CreateContacts.d.ts.map +1 -0
  116. package/dist/migrations/sqlite/1710438363002-CreateContacts.js +79 -0
  117. package/dist/migrations/sqlite/1710438363002-CreateContacts.js.map +1 -0
  118. package/dist/migrations/sqlite/1715761125002-CreateContacts.d.ts +7 -0
  119. package/dist/migrations/sqlite/1715761125002-CreateContacts.d.ts.map +1 -0
  120. package/dist/migrations/sqlite/1715761125002-CreateContacts.js +73 -0
  121. package/dist/migrations/sqlite/1715761125002-CreateContacts.js.map +1 -0
  122. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.d.ts +7 -0
  123. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.d.ts.map +1 -0
  124. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.js +38 -0
  125. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.js.map +1 -0
  126. package/dist/presentationDefinition/AbstractPDStore.d.ts +12 -0
  127. package/dist/presentationDefinition/AbstractPDStore.d.ts.map +1 -0
  128. package/dist/presentationDefinition/AbstractPDStore.js +7 -0
  129. package/dist/presentationDefinition/AbstractPDStore.js.map +1 -0
  130. package/dist/presentationDefinition/PDStore.d.ts +19 -0
  131. package/dist/presentationDefinition/PDStore.d.ts.map +1 -0
  132. package/dist/presentationDefinition/PDStore.js +152 -0
  133. package/dist/presentationDefinition/PDStore.js.map +1 -0
  134. package/dist/types/contact/contact.d.ts +51 -15
  135. package/dist/types/contact/contact.d.ts.map +1 -1
  136. package/dist/types/contact/contact.js +12 -7
  137. package/dist/types/contact/contact.js.map +1 -1
  138. package/dist/types/index.d.ts +2 -0
  139. package/dist/types/index.d.ts.map +1 -1
  140. package/dist/types/index.js +2 -0
  141. package/dist/types/index.js.map +1 -1
  142. package/dist/types/presentationDefinition/IAbstractPDStore.d.ts +17 -0
  143. package/dist/types/presentationDefinition/IAbstractPDStore.d.ts.map +1 -0
  144. package/dist/types/presentationDefinition/IAbstractPDStore.js +3 -0
  145. package/dist/types/presentationDefinition/IAbstractPDStore.js.map +1 -0
  146. package/dist/types/presentationDefinition/presentationDefinition.d.ts +16 -0
  147. package/dist/types/presentationDefinition/presentationDefinition.d.ts.map +1 -0
  148. package/dist/types/presentationDefinition/presentationDefinition.js +3 -0
  149. package/dist/types/presentationDefinition/presentationDefinition.js.map +1 -0
  150. package/dist/utils/contact/MappingUtils.d.ts +6 -4
  151. package/dist/utils/contact/MappingUtils.d.ts.map +1 -1
  152. package/dist/utils/contact/MappingUtils.js +122 -18
  153. package/dist/utils/contact/MappingUtils.js.map +1 -1
  154. package/dist/utils/presentationDefinition/MappingUtils.d.ts +6 -0
  155. package/dist/utils/presentationDefinition/MappingUtils.d.ts.map +1 -0
  156. package/dist/utils/presentationDefinition/MappingUtils.js +48 -0
  157. package/dist/utils/presentationDefinition/MappingUtils.js.map +1 -0
  158. package/package.json +7 -4
  159. package/src/__tests__/contact.entities.test.ts +129 -44
  160. package/src/__tests__/contact.store.test.ts +205 -29
  161. package/src/__tests__/eventLogger.entities.test.ts +2 -2
  162. package/src/__tests__/eventLogger.store.test.ts +2 -5
  163. package/src/__tests__/pd-manager.entities.test.ts +71 -0
  164. package/src/__tests__/pd-manager.store.test.ts +191 -0
  165. package/src/contact/ContactStore.ts +74 -30
  166. package/src/entities/contact/BaseContactEntity.ts +11 -0
  167. package/src/entities/contact/ConnectionEntity.ts +6 -0
  168. package/src/entities/contact/ContactMetadataItemEntity.ts +50 -0
  169. package/src/entities/contact/CorrelationIdentifierEntity.ts +6 -0
  170. package/src/entities/contact/DidAuthConfigEntity.ts +6 -0
  171. package/src/entities/contact/ElectronicAddressEntity.ts +6 -0
  172. package/src/entities/contact/IMetadataEntity.ts +8 -0
  173. package/src/entities/contact/IdentityEntity.ts +11 -2
  174. package/src/entities/contact/IdentityMetadataItemEntity.ts +16 -4
  175. package/src/entities/contact/NaturalPersonEntity.ts +6 -0
  176. package/src/entities/contact/OpenIdConfigEntity.ts +6 -0
  177. package/src/entities/contact/OrganizationEntity.ts +6 -0
  178. package/src/entities/contact/PartyEntity.ts +6 -0
  179. package/src/entities/contact/PartyRelationshipEntity.ts +6 -0
  180. package/src/entities/contact/PartyTypeEntity.ts +4 -4
  181. package/src/entities/contact/PhysicalAddressEntity.ts +9 -2
  182. package/src/entities/presentationDefinition/PresentationDefinitionItemEntity.ts +43 -0
  183. package/src/index.ts +13 -0
  184. package/src/migrations/generic/10-CreatePresentationDefinitions.ts +66 -0
  185. package/src/migrations/generic/8-CreateContacts.ts +66 -0
  186. package/src/migrations/generic/9-CreateContacts.ts +66 -0
  187. package/src/migrations/generic/index.ts +11 -1
  188. package/src/migrations/index.ts +1 -0
  189. package/src/migrations/postgres/1690925872592-CreateContacts.ts +57 -3
  190. package/src/migrations/postgres/1710438363001-CreateContacts.ts +63 -0
  191. package/src/migrations/postgres/1715761125001-CreateContacts.ts +60 -0
  192. package/src/migrations/postgres/1716475165345-CreatePresentationDefinitions.ts +25 -0
  193. package/src/migrations/sqlite/1690925872693-CreateContacts.ts +70 -3
  194. package/src/migrations/sqlite/1710438363002-CreateContacts.ts +83 -0
  195. package/src/migrations/sqlite/1715761125002-CreateContacts.ts +59 -0
  196. package/src/migrations/sqlite/1716475165344-CreatePresentationDefinitions.ts +24 -0
  197. package/src/presentationDefinition/AbstractPDStore.ts +20 -0
  198. package/src/presentationDefinition/PDStore.ts +185 -0
  199. package/src/types/contact/contact.ts +56 -15
  200. package/src/types/index.ts +2 -0
  201. package/src/types/presentationDefinition/IAbstractPDStore.ts +25 -0
  202. package/src/types/presentationDefinition/presentationDefinition.ts +17 -0
  203. package/src/utils/contact/MappingUtils.ts +128 -18
  204. package/src/utils/presentationDefinition/MappingUtils.ts +52 -0
@@ -1,6 +1,8 @@
1
1
  export * from './issuanceBranding/issuanceBranding'
2
2
  export * from './issuanceBranding/IAbstractIssuanceBrandingStore'
3
3
  export * from './contact/contact'
4
+ export * from './presentationDefinition/presentationDefinition'
5
+ export * from './presentationDefinition/IAbstractPDStore'
4
6
  export * from './contact/IAbstractContactStore'
5
7
  export * from './validation/validation'
6
8
  export * from './statusList/statusList'
@@ -0,0 +1,25 @@
1
+ import { NonPersistedPresentationDefinitionItem, PresentationDefinitionItem, PresentationDefinitionItemFilter } from './presentationDefinition'
2
+
3
+ export type FindDefinitionArgs = Array<PresentationDefinitionItemFilter>
4
+
5
+ export type GetDefinitionArgs = {
6
+ itemId: string
7
+ }
8
+
9
+ export type HasDefinitionArgs = GetDefinitionArgs
10
+
11
+ export type GetDefinitionsArgs = {
12
+ filter?: FindDefinitionArgs
13
+ }
14
+
15
+ export type HasDefinitionsArgs = GetDefinitionsArgs
16
+
17
+ export type AddDefinitionArgs = NonPersistedPresentationDefinitionItem
18
+
19
+ export type UpdateDefinitionArgs = PresentationDefinitionItem
20
+
21
+ export type DeleteDefinitionArgs = {
22
+ itemId: string
23
+ }
24
+
25
+ export type DeleteDefinitionsArgs = GetDefinitionsArgs
@@ -0,0 +1,17 @@
1
+ import { IPresentationDefinition } from '@sphereon/pex'
2
+
3
+ export type PresentationDefinitionItem = {
4
+ id: string
5
+ definitionId: string
6
+ tenantId?: string
7
+ version: string
8
+ name?: string
9
+ purpose?: string
10
+ definitionPayload: IPresentationDefinition
11
+ createdAt: Date
12
+ lastUpdatedAt: Date
13
+ }
14
+
15
+ export type NonPersistedPresentationDefinitionItem = Omit<PresentationDefinitionItem, 'id' | 'createdAt' | 'lastUpdatedAt'>
16
+ export type PartialPresentationDefinitionItem = Partial<PresentationDefinitionItem>
17
+ export type PresentationDefinitionItemFilter = Partial<Omit<PresentationDefinitionItem, 'definitionPayload'>> // TODO add logic to linearize & hash definitionPayload into a separate column so we can filter on it?
@@ -1,4 +1,5 @@
1
1
  import {
2
+ MetadataTypes,
2
3
  Connection,
3
4
  ConnectionConfig,
4
5
  Contact,
@@ -45,6 +46,7 @@ import { IdentityMetadataItemEntity } from '../../entities/contact/IdentityMetad
45
46
  import { OpenIdConfigEntity } from '../../entities/contact/OpenIdConfigEntity'
46
47
  import { PartyTypeEntity } from '../../entities/contact/PartyTypeEntity'
47
48
  import { PhysicalAddressEntity } from '../../entities/contact/PhysicalAddressEntity'
49
+ import { ContactMetadataItemEntity } from '../../entities/contact/ContactMetadataItemEntity'
48
50
 
49
51
  export const partyEntityFrom = (party: NonPersistedParty): PartyEntity => {
50
52
  const partyEntity: PartyEntity = new PartyEntity()
@@ -58,6 +60,8 @@ export const partyEntityFrom = (party: NonPersistedParty): PartyEntity => {
58
60
  : []
59
61
  partyEntity.partyType = partyTypeEntityFrom(party.partyType)
60
62
  partyEntity.contact = contactEntityFrom(party.contact)
63
+ partyEntity.ownerId = party.ownerId
64
+ partyEntity.tenantId = party.tenantId
61
65
 
62
66
  return partyEntity
63
67
  }
@@ -77,6 +81,8 @@ export const partyFrom = (party: PartyEntity): Party => {
77
81
  relationships: party.relationships ? party.relationships.map((relationship: PartyRelationshipEntity) => partyRelationshipFrom(relationship)) : [],
78
82
  partyType: partyTypeFrom(party.partyType),
79
83
  contact: contactFrom(party.contact),
84
+ ownerId: party.ownerId,
85
+ tenantId: party.tenantId,
80
86
  createdAt: party.createdAt,
81
87
  lastUpdatedAt: party.lastUpdatedAt,
82
88
  }
@@ -112,6 +118,8 @@ export const connectionEntityFrom = (connection: NonPersistedConnection): Connec
112
118
  const connectionEntity: ConnectionEntity = new ConnectionEntity()
113
119
  connectionEntity.type = connection.type
114
120
  connectionEntity.config = configEntityFrom(connection.config)
121
+ connectionEntity.ownerId = connection.ownerId
122
+ connectionEntity.tenantId = connection.tenantId
115
123
 
116
124
  return connectionEntity
117
125
  }
@@ -120,6 +128,8 @@ export const connectionFrom = (connection: ConnectionEntity): Connection => {
120
128
  return {
121
129
  id: connection.id,
122
130
  type: connection.type,
131
+ ownerId: connection.ownerId,
132
+ tenantId: connection.tenantId,
123
133
  config: configFrom(connection.config),
124
134
  }
125
135
  }
@@ -138,6 +148,8 @@ export const correlationIdentifierEntityFrom = (identifier: NonPersistedCorrelat
138
148
  const identifierEntity: CorrelationIdentifierEntity = new CorrelationIdentifierEntity()
139
149
  identifierEntity.type = identifier.type
140
150
  identifierEntity.correlationId = identifier.correlationId
151
+ identifierEntity.ownerId = identifier.ownerId
152
+ identifierEntity.tenantId = identifier.tenantId
141
153
 
142
154
  return identifierEntity
143
155
  }
@@ -147,6 +159,8 @@ export const correlationIdentifierFrom = (identifier: CorrelationIdentifierEntit
147
159
  id: identifier.id,
148
160
  type: identifier.type,
149
161
  correlationId: identifier.correlationId,
162
+ ownerId: identifier.ownerId,
163
+ tenantId: identifier.tenantId,
150
164
  }
151
165
  }
152
166
 
@@ -155,7 +169,8 @@ export const didAuthConfigEntityFrom = (config: NonPersistedDidAuthConfig): DidA
155
169
  didAuthConfig.identifier = config.identifier.did
156
170
  didAuthConfig.redirectUrl = config.redirectUrl
157
171
  didAuthConfig.sessionId = config.sessionId
158
-
172
+ didAuthConfig.ownerId = config.ownerId
173
+ didAuthConfig.tenantId = config.tenantId
159
174
  return didAuthConfig
160
175
  }
161
176
 
@@ -163,6 +178,8 @@ export const electronicAddressEntityFrom = (electronicAddress: NonPersistedElect
163
178
  const electronicAddressEntity: ElectronicAddressEntity = new ElectronicAddressEntity()
164
179
  electronicAddressEntity.type = electronicAddress.type
165
180
  electronicAddressEntity.electronicAddress = electronicAddress.electronicAddress
181
+ electronicAddressEntity.ownerId = electronicAddress.ownerId
182
+ electronicAddressEntity.tenantId = electronicAddress.tenantId
166
183
 
167
184
  return electronicAddressEntity
168
185
  }
@@ -172,6 +189,8 @@ export const electronicAddressFrom = (electronicAddress: ElectronicAddressEntity
172
189
  id: electronicAddress.id,
173
190
  type: electronicAddress.type,
174
191
  electronicAddress: electronicAddress.electronicAddress,
192
+ ownerId: electronicAddress.ownerId,
193
+ tenantId: electronicAddress.tenantId,
175
194
  createdAt: electronicAddress.createdAt,
176
195
  lastUpdatedAt: electronicAddress.lastUpdatedAt,
177
196
  }
@@ -187,6 +206,8 @@ export const physicalAddressEntityFrom = (physicalAddress: NonPersistedPhysicalA
187
206
  physicalAddressEntity.provinceName = physicalAddress.provinceName
188
207
  physicalAddressEntity.countryCode = physicalAddress.countryCode
189
208
  physicalAddressEntity.buildingName = physicalAddress.buildingName
209
+ physicalAddressEntity.ownerId = physicalAddress.ownerId
210
+ physicalAddressEntity.tenantId = physicalAddress.tenantId
190
211
 
191
212
  return physicalAddressEntity
192
213
  }
@@ -202,19 +223,25 @@ export const physicalAddressFrom = (physicalAddress: PhysicalAddressEntity): Phy
202
223
  provinceName: physicalAddress.provinceName,
203
224
  countryCode: physicalAddress.countryCode,
204
225
  buildingName: physicalAddress.buildingName,
226
+ ownerId: physicalAddress.ownerId,
227
+ tenantId: physicalAddress.tenantId,
205
228
  createdAt: physicalAddress.createdAt,
206
229
  lastUpdatedAt: physicalAddress.lastUpdatedAt,
207
230
  }
208
231
  }
209
232
 
210
- export const identityEntityFrom = (args: NonPersistedIdentity): IdentityEntity => {
233
+ export const identityEntityFrom = (entity: NonPersistedIdentity): IdentityEntity => {
211
234
  const identityEntity: IdentityEntity = new IdentityEntity()
212
- identityEntity.alias = args.alias
213
- identityEntity.roles = args.roles
214
- identityEntity.identifier = correlationIdentifierEntityFrom(args.identifier)
215
- identityEntity.connection = args.connection ? connectionEntityFrom(args.connection) : undefined
216
- identityEntity.metadata = args.metadata ? args.metadata.map((item: NonPersistedMetadataItem) => metadataItemEntityFrom(item)) : []
217
-
235
+ identityEntity.alias = entity.alias
236
+ identityEntity.origin = entity.origin
237
+ identityEntity.ownerId = entity.ownerId
238
+ identityEntity.tenantId = entity.tenantId
239
+ identityEntity.roles = entity.roles
240
+ identityEntity.identifier = correlationIdentifierEntityFrom(entity.identifier)
241
+ identityEntity.connection = entity.connection ? connectionEntityFrom(entity.connection) : undefined
242
+ identityEntity.metadata = entity.metadata
243
+ ? entity.metadata.map(identityMetadataItemEntityFrom).filter((entity): entity is IdentityMetadataItemEntity => entity !== undefined)
244
+ : []
218
245
  return identityEntity
219
246
  }
220
247
 
@@ -222,7 +249,10 @@ export const identityFrom = (identity: IdentityEntity): Identity => {
222
249
  return {
223
250
  id: identity.id,
224
251
  alias: identity.alias,
252
+ origin: identity.origin,
225
253
  roles: identity.roles,
254
+ tenantId: identity.tenantId,
255
+ ownerId: identity.ownerId,
226
256
  identifier: correlationIdentifierFrom(identity.identifier),
227
257
  ...(identity.connection && { connection: connectionFrom(identity.connection) }),
228
258
  metadata: identity.metadata ? identity.metadata.map((item: IdentityMetadataItemEntity) => metadataItemFrom(item)) : [],
@@ -231,20 +261,75 @@ export const identityFrom = (identity: IdentityEntity): Identity => {
231
261
  }
232
262
  }
233
263
 
234
- export const metadataItemEntityFrom = (item: NonPersistedMetadataItem): IdentityMetadataItemEntity => {
235
- const metadataItemEntity: IdentityMetadataItemEntity = new IdentityMetadataItemEntity()
236
- metadataItemEntity.label = item.label
237
- metadataItemEntity.value = item.value
264
+ const metadataItemEntityFrom = <T extends MetadataTypes, U extends { new (): any }>(
265
+ item: NonPersistedMetadataItem<T>,
266
+ EntityClass: U,
267
+ ): InstanceType<U> | undefined => {
268
+ const { label, value } = item
269
+
270
+ if (value === null || value === undefined) {
271
+ return undefined
272
+ }
238
273
 
274
+ const metadataItemEntity = new EntityClass()
275
+ metadataItemEntity.label = label
276
+ metadataItemEntity.valueType = typeof value
277
+
278
+ switch (typeof value) {
279
+ case 'undefined':
280
+ return undefined
281
+ case 'string':
282
+ metadataItemEntity.stringValue = value
283
+ break
284
+ case 'number':
285
+ metadataItemEntity.numberValue = value
286
+ break
287
+ case 'boolean':
288
+ metadataItemEntity.boolValue = value
289
+ break
290
+ case 'object':
291
+ metadataItemEntity.valueType = Object.prototype.toString.call(value).slice(8, -1)
292
+ if (value instanceof Date) {
293
+ metadataItemEntity.dateValue = value
294
+ } else {
295
+ // For now, we only support / implement not-primitive type Date in the entity
296
+ throw new Error(`Unsupported object type: ${metadataItemEntity.valueType} for value ${value}`)
297
+ }
298
+ break
299
+ }
239
300
  return metadataItemEntity
240
301
  }
241
302
 
242
- export const metadataItemFrom = (item: IdentityMetadataItemEntity): MetadataItem => {
243
- return {
244
- id: item.id,
245
- label: item.label,
246
- value: item.value,
303
+ export const identityMetadataItemEntityFrom = (item: NonPersistedMetadataItem<MetadataTypes>): IdentityMetadataItemEntity | undefined => {
304
+ return metadataItemEntityFrom(item, IdentityMetadataItemEntity)
305
+ }
306
+
307
+ export const contactMetadataItemEntityFrom = (item: NonPersistedMetadataItem<MetadataTypes>): ContactMetadataItemEntity | undefined => {
308
+ return metadataItemEntityFrom(item, ContactMetadataItemEntity)
309
+ }
310
+
311
+ export const metadataItemFrom = (entity: IdentityMetadataItemEntity | ContactMetadataItemEntity): MetadataItem<MetadataTypes> => {
312
+ const item: Partial<MetadataItem<MetadataTypes>> = {
313
+ id: entity.id,
314
+ label: entity.label,
315
+ }
316
+ switch (entity.valueType) {
317
+ case 'string':
318
+ item.value = entity.stringValue
319
+ break
320
+ case 'number':
321
+ item.value = entity.numberValue
322
+ break
323
+ case 'Date':
324
+ item.value = entity.dateValue
325
+ break
326
+ case 'boolean':
327
+ item.value = entity.boolValue
328
+ break
329
+ default:
330
+ throw new Error(`Unsupported valueType ${entity.valueType}`)
247
331
  }
332
+ return item as MetadataItem<MetadataTypes>
248
333
  }
249
334
 
250
335
  export const naturalPersonEntityFrom = (naturalPerson: NonPersistedNaturalPerson): NaturalPersonEntity => {
@@ -253,6 +338,11 @@ export const naturalPersonEntityFrom = (naturalPerson: NonPersistedNaturalPerson
253
338
  naturalPersonEntity.middleName = naturalPerson.middleName
254
339
  naturalPersonEntity.lastName = naturalPerson.lastName
255
340
  naturalPersonEntity.displayName = naturalPerson.displayName
341
+ naturalPersonEntity.ownerId = naturalPerson.ownerId
342
+ naturalPersonEntity.tenantId = naturalPerson.tenantId
343
+ naturalPersonEntity.metadata = naturalPerson.metadata
344
+ ? naturalPerson.metadata.map(contactMetadataItemEntityFrom).filter((entity): entity is ContactMetadataItemEntity => entity !== undefined)
345
+ : []
256
346
 
257
347
  return naturalPersonEntity
258
348
  }
@@ -264,6 +354,9 @@ export const naturalPersonFrom = (naturalPerson: NaturalPersonEntity): NaturalPe
264
354
  middleName: naturalPerson.middleName,
265
355
  lastName: naturalPerson.lastName,
266
356
  displayName: naturalPerson.displayName,
357
+ metadata: naturalPerson.metadata ? naturalPerson.metadata.map((item: ContactMetadataItemEntity) => metadataItemFrom(item)) : [],
358
+ ownerId: naturalPerson.ownerId,
359
+ tenantId: naturalPerson.tenantId,
267
360
  createdAt: naturalPerson.createdAt,
268
361
  lastUpdatedAt: naturalPerson.lastUpdatedAt,
269
362
  }
@@ -278,6 +371,8 @@ export const openIdConfigEntityFrom = (config: NonPersistedOpenIdConfig): OpenId
278
371
  openIdConfig.redirectUrl = config.redirectUrl
279
372
  openIdConfig.dangerouslyAllowInsecureHttpRequests = config.dangerouslyAllowInsecureHttpRequests
280
373
  openIdConfig.clientAuthMethod = config.clientAuthMethod
374
+ openIdConfig.ownerId = config.ownerId
375
+ openIdConfig.tenantId = config.tenantId
281
376
 
282
377
  return openIdConfig
283
378
  }
@@ -286,6 +381,11 @@ export const organizationEntityFrom = (organization: NonPersistedOrganization):
286
381
  const organizationEntity: OrganizationEntity = new OrganizationEntity()
287
382
  organizationEntity.legalName = organization.legalName
288
383
  organizationEntity.displayName = organization.displayName
384
+ organizationEntity.ownerId = organization.ownerId
385
+ organizationEntity.tenantId = organization.tenantId
386
+ organizationEntity.metadata = organization.metadata
387
+ ? organization.metadata.map(contactMetadataItemEntityFrom).filter((entity): entity is ContactMetadataItemEntity => entity !== undefined)
388
+ : []
289
389
 
290
390
  return organizationEntity
291
391
  }
@@ -295,6 +395,9 @@ export const organizationFrom = (organization: OrganizationEntity): Organization
295
395
  id: organization.id,
296
396
  legalName: organization.legalName,
297
397
  displayName: organization.displayName,
398
+ metadata: organization.metadata ? organization.metadata.map((item: ContactMetadataItemEntity) => metadataItemFrom(item)) : [],
399
+ ownerId: organization.ownerId,
400
+ tenantId: organization.tenantId,
298
401
  createdAt: organization.createdAt,
299
402
  lastUpdatedAt: organization.lastUpdatedAt,
300
403
  }
@@ -304,7 +407,8 @@ export const partyRelationshipEntityFrom = (relationship: NonPersistedPartyRelat
304
407
  const partyRelationshipEntity: PartyRelationshipEntity = new PartyRelationshipEntity()
305
408
  partyRelationshipEntity.leftId = relationship.leftId
306
409
  partyRelationshipEntity.rightId = relationship.rightId
307
-
410
+ partyRelationshipEntity.ownerId = relationship.ownerId
411
+ partyRelationshipEntity.tenantId = relationship.tenantId
308
412
  return partyRelationshipEntity
309
413
  }
310
414
 
@@ -313,6 +417,8 @@ export const partyRelationshipFrom = (relationship: PartyRelationshipEntity): Pa
313
417
  id: relationship.id,
314
418
  leftId: relationship.leftId,
315
419
  rightId: relationship.rightId,
420
+ ownerId: relationship.ownerId,
421
+ tenantId: relationship.tenantId,
316
422
  createdAt: relationship.createdAt,
317
423
  lastUpdatedAt: relationship.lastUpdatedAt,
318
424
  }
@@ -365,6 +471,8 @@ export const openIdConfigFrom = (config: OpenIdConfigEntity): OpenIdConfig => {
365
471
  redirectUrl: config.redirectUrl,
366
472
  dangerouslyAllowInsecureHttpRequests: config.dangerouslyAllowInsecureHttpRequests,
367
473
  clientAuthMethod: config.clientAuthMethod,
474
+ ownerId: config.ownerId,
475
+ tenantId: config.tenantId,
368
476
  }
369
477
  }
370
478
 
@@ -375,6 +483,8 @@ export const didAuthConfigFrom = (config: DidAuthConfigEntity): DidAuthConfig =>
375
483
  stateId: '', // FIXME
376
484
  redirectUrl: config.redirectUrl,
377
485
  sessionId: config.sessionId,
486
+ ownerId: config.ownerId,
487
+ tenantId: config.tenantId,
378
488
  }
379
489
  }
380
490
 
@@ -0,0 +1,52 @@
1
+ import { PresentationDefinitionItemEntity } from '../../entities/presentationDefinition/PresentationDefinitionItemEntity'
2
+ import { IPresentationDefinition } from '@sphereon/pex'
3
+ import { NonPersistedPresentationDefinitionItem, PartialPresentationDefinitionItem, PresentationDefinitionItem } from '../../types'
4
+ import { blake2bHex } from 'blakejs'
5
+
6
+ export const presentationDefinitionItemFrom = (entity: PresentationDefinitionItemEntity): PresentationDefinitionItem => {
7
+ return {
8
+ id: entity.id,
9
+ tenantId: entity.tenantId,
10
+ definitionId: entity.definitionId,
11
+ version: entity.version,
12
+ name: entity.name,
13
+ purpose: entity.purpose,
14
+ definitionPayload: JSON.parse(entity.definitionPayload) as IPresentationDefinition,
15
+ createdAt: entity.createdAt,
16
+ lastUpdatedAt: entity.lastUpdatedAt,
17
+ }
18
+ }
19
+
20
+ export const presentationDefinitionEntityItemFrom = (item: NonPersistedPresentationDefinitionItem): PresentationDefinitionItemEntity => {
21
+ const entity = new PresentationDefinitionItemEntity()
22
+
23
+ entity.tenantId = item.tenantId
24
+ entity.definitionId = item.definitionId!
25
+ entity.version = item.version
26
+ entity.name = item.name
27
+ entity.purpose = item.purpose
28
+ entity.definitionPayload = JSON.stringify(item.definitionPayload!)
29
+ return entity
30
+ }
31
+
32
+ function hashPayload(payload: IPresentationDefinition): string {
33
+ return blake2bHex(JSON.stringify(payload))
34
+ }
35
+
36
+ export function isPresentationDefinitionEqual(base: PartialPresentationDefinitionItem, compare: PartialPresentationDefinitionItem): boolean {
37
+ if (
38
+ base.definitionId !== compare.definitionId ||
39
+ base.tenantId != compare.tenantId ||
40
+ base.version !== compare.version ||
41
+ base.name != compare.name ||
42
+ base.purpose != compare.purpose
43
+ ) {
44
+ return false
45
+ }
46
+
47
+ if (base.definitionPayload && compare.definitionPayload) {
48
+ return hashPayload(base.definitionPayload) === hashPayload(compare.definitionPayload)
49
+ }
50
+
51
+ return false
52
+ }