@sphereon/ssi-sdk.data-store 0.11.1-unstable.73 → 0.12.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 (165) hide show
  1. package/README.md +5 -0
  2. package/dist/contact/AbstractContactStore.d.ts +1 -2
  3. package/dist/contact/AbstractContactStore.d.ts.map +1 -1
  4. package/dist/contact/AbstractContactStore.js.map +1 -1
  5. package/dist/contact/ContactStore.d.ts +1 -2
  6. package/dist/contact/ContactStore.d.ts.map +1 -1
  7. package/dist/contact/ContactStore.js +11 -11
  8. package/dist/contact/ContactStore.js.map +1 -1
  9. package/dist/entities/contact/ConnectionEntity.d.ts +1 -1
  10. package/dist/entities/contact/ConnectionEntity.d.ts.map +1 -1
  11. package/dist/entities/contact/ConnectionEntity.js +4 -4
  12. package/dist/entities/contact/ConnectionEntity.js.map +1 -1
  13. package/dist/entities/contact/ContactEntity.d.ts +1 -1
  14. package/dist/entities/contact/ContactEntity.d.ts.map +1 -1
  15. package/dist/entities/contact/ContactEntity.js +2 -5
  16. package/dist/entities/contact/ContactEntity.js.map +1 -1
  17. package/dist/entities/contact/CorrelationIdentifierEntity.d.ts +1 -1
  18. package/dist/entities/contact/CorrelationIdentifierEntity.d.ts.map +1 -1
  19. package/dist/entities/contact/CorrelationIdentifierEntity.js +3 -4
  20. package/dist/entities/contact/CorrelationIdentifierEntity.js.map +1 -1
  21. package/dist/entities/contact/DidAuthConfigEntity.d.ts +1 -1
  22. package/dist/entities/contact/DidAuthConfigEntity.d.ts.map +1 -1
  23. package/dist/entities/contact/IdentityEntity.d.ts +2 -2
  24. package/dist/entities/contact/IdentityEntity.d.ts.map +1 -1
  25. package/dist/entities/contact/IdentityEntity.js +4 -7
  26. package/dist/entities/contact/IdentityEntity.js.map +1 -1
  27. package/dist/entities/contact/IdentityMetadataItemEntity.d.ts +1 -1
  28. package/dist/entities/contact/IdentityMetadataItemEntity.d.ts.map +1 -1
  29. package/dist/entities/contact/IdentityMetadataItemEntity.js +1 -2
  30. package/dist/entities/contact/IdentityMetadataItemEntity.js.map +1 -1
  31. package/dist/entities/contact/OpenIdConfigEntity.d.ts +1 -1
  32. package/dist/entities/contact/OpenIdConfigEntity.d.ts.map +1 -1
  33. package/dist/entities/issuanceBranding/BackgroundAttributesEntity.d.ts +11 -0
  34. package/dist/entities/issuanceBranding/BackgroundAttributesEntity.d.ts.map +1 -0
  35. package/dist/entities/issuanceBranding/BackgroundAttributesEntity.js +74 -0
  36. package/dist/entities/issuanceBranding/BackgroundAttributesEntity.js.map +1 -0
  37. package/dist/entities/issuanceBranding/BaseLocaleBrandingEntity.d.ts +18 -0
  38. package/dist/entities/issuanceBranding/BaseLocaleBrandingEntity.d.ts.map +1 -0
  39. package/dist/entities/issuanceBranding/BaseLocaleBrandingEntity.js +120 -0
  40. package/dist/entities/issuanceBranding/BaseLocaleBrandingEntity.js.map +1 -0
  41. package/dist/entities/issuanceBranding/CredentialBrandingEntity.d.ts +15 -0
  42. package/dist/entities/issuanceBranding/CredentialBrandingEntity.d.ts.map +1 -0
  43. package/dist/entities/issuanceBranding/CredentialBrandingEntity.js +102 -0
  44. package/dist/entities/issuanceBranding/CredentialBrandingEntity.js.map +1 -0
  45. package/dist/entities/issuanceBranding/CredentialLocaleBrandingEntity.d.ts +9 -0
  46. package/dist/entities/issuanceBranding/CredentialLocaleBrandingEntity.d.ts.map +1 -0
  47. package/dist/entities/issuanceBranding/CredentialLocaleBrandingEntity.js +49 -0
  48. package/dist/entities/issuanceBranding/CredentialLocaleBrandingEntity.js.map +1 -0
  49. package/dist/entities/issuanceBranding/ImageAttributesEntity.d.ts +14 -0
  50. package/dist/entities/issuanceBranding/ImageAttributesEntity.d.ts.map +1 -0
  51. package/dist/entities/issuanceBranding/ImageAttributesEntity.js +92 -0
  52. package/dist/entities/issuanceBranding/ImageAttributesEntity.js.map +1 -0
  53. package/dist/entities/issuanceBranding/ImageDimensionsEntity.d.ts +9 -0
  54. package/dist/entities/issuanceBranding/ImageDimensionsEntity.d.ts.map +1 -0
  55. package/dist/entities/issuanceBranding/ImageDimensionsEntity.js +39 -0
  56. package/dist/entities/issuanceBranding/ImageDimensionsEntity.js.map +1 -0
  57. package/dist/entities/issuanceBranding/IssuerBrandingEntity.d.ts +14 -0
  58. package/dist/entities/issuanceBranding/IssuerBrandingEntity.d.ts.map +1 -0
  59. package/dist/entities/issuanceBranding/IssuerBrandingEntity.js +95 -0
  60. package/dist/entities/issuanceBranding/IssuerBrandingEntity.js.map +1 -0
  61. package/dist/entities/issuanceBranding/IssuerLocaleBrandingEntity.d.ts +9 -0
  62. package/dist/entities/issuanceBranding/IssuerLocaleBrandingEntity.d.ts.map +1 -0
  63. package/dist/entities/issuanceBranding/IssuerLocaleBrandingEntity.js +49 -0
  64. package/dist/entities/issuanceBranding/IssuerLocaleBrandingEntity.js.map +1 -0
  65. package/dist/entities/issuanceBranding/TextAttributesEntity.d.ts +9 -0
  66. package/dist/entities/issuanceBranding/TextAttributesEntity.d.ts.map +1 -0
  67. package/dist/entities/issuanceBranding/TextAttributesEntity.js +62 -0
  68. package/dist/entities/issuanceBranding/TextAttributesEntity.js.map +1 -0
  69. package/dist/entities/validators/index.d.ts +7 -0
  70. package/dist/entities/validators/index.d.ts.map +1 -0
  71. package/dist/entities/validators/index.js +27 -0
  72. package/dist/entities/validators/index.js.map +1 -0
  73. package/dist/index.d.ts +15 -4
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +45 -5
  76. package/dist/index.js.map +1 -1
  77. package/dist/issuanceBranding/AbstractIssuanceBrandingStore.d.ts +20 -0
  78. package/dist/issuanceBranding/AbstractIssuanceBrandingStore.d.ts.map +1 -0
  79. package/dist/issuanceBranding/AbstractIssuanceBrandingStore.js +7 -0
  80. package/dist/issuanceBranding/AbstractIssuanceBrandingStore.js.map +1 -0
  81. package/dist/issuanceBranding/IssuanceBrandingStore.d.ts +31 -0
  82. package/dist/issuanceBranding/IssuanceBrandingStore.d.ts.map +1 -0
  83. package/dist/issuanceBranding/IssuanceBrandingStore.js +375 -0
  84. package/dist/issuanceBranding/IssuanceBrandingStore.js.map +1 -0
  85. package/dist/migrations/generic/1-CreateContacts.js +1 -1
  86. package/dist/migrations/generic/1-CreateContacts.js.map +1 -1
  87. package/dist/migrations/generic/1-CreateIssuanceBranding.d.ts +7 -0
  88. package/dist/migrations/generic/1-CreateIssuanceBranding.d.ts.map +1 -0
  89. package/dist/migrations/generic/1-CreateIssuanceBranding.js +72 -0
  90. package/dist/migrations/generic/1-CreateIssuanceBranding.js.map +1 -0
  91. package/dist/migrations/generic/index.d.ts.map +1 -1
  92. package/dist/migrations/generic/index.js +2 -1
  93. package/dist/migrations/generic/index.js.map +1 -1
  94. package/dist/migrations/postgres/1685628974232-CreateIssuanceBranding.d.ts +7 -0
  95. package/dist/migrations/postgres/1685628974232-CreateIssuanceBranding.d.ts.map +1 -0
  96. package/dist/migrations/postgres/1685628974232-CreateIssuanceBranding.js +67 -0
  97. package/dist/migrations/postgres/1685628974232-CreateIssuanceBranding.js.map +1 -0
  98. package/dist/migrations/sqlite/1659463069549-CreateContacts.d.ts.map +1 -1
  99. package/dist/migrations/sqlite/1659463069549-CreateContacts.js.map +1 -1
  100. package/dist/migrations/sqlite/1685628973231-CreateIssuanceBranding.d.ts +7 -0
  101. package/dist/migrations/sqlite/1685628973231-CreateIssuanceBranding.d.ts.map +1 -0
  102. package/dist/migrations/sqlite/1685628973231-CreateIssuanceBranding.js +89 -0
  103. package/dist/migrations/sqlite/1685628973231-CreateIssuanceBranding.js.map +1 -0
  104. package/dist/types/{IAbstractContactStore.d.ts → contact/IAbstractContactStore.d.ts} +2 -2
  105. package/dist/types/contact/IAbstractContactStore.d.ts.map +1 -0
  106. package/dist/types/contact/IAbstractContactStore.js.map +1 -0
  107. package/dist/types/contact/contact.d.ts.map +1 -0
  108. package/dist/types/contact/contact.js.map +1 -0
  109. package/dist/types/index.d.ts +5 -0
  110. package/dist/types/index.d.ts.map +1 -0
  111. package/dist/types/index.js +21 -0
  112. package/dist/types/index.js.map +1 -0
  113. package/dist/types/issuanceBranding/IAbstractIssuanceBrandingStore.d.ts +59 -0
  114. package/dist/types/issuanceBranding/IAbstractIssuanceBrandingStore.d.ts.map +1 -0
  115. package/dist/types/issuanceBranding/IAbstractIssuanceBrandingStore.js +3 -0
  116. package/dist/types/issuanceBranding/IAbstractIssuanceBrandingStore.js.map +1 -0
  117. package/dist/types/issuanceBranding/issuanceBranding.d.ts +115 -0
  118. package/dist/types/issuanceBranding/issuanceBranding.d.ts.map +1 -0
  119. package/dist/types/issuanceBranding/issuanceBranding.js +3 -0
  120. package/dist/types/issuanceBranding/issuanceBranding.js.map +1 -0
  121. package/package.json +3 -3
  122. package/src/__tests__/contact.entities.test.ts +31 -31
  123. package/src/__tests__/contact.store.test.ts +32 -32
  124. package/src/__tests__/issuanceBranding.entities.test.ts +844 -0
  125. package/src/__tests__/issuanceBranding.store.test.ts +1884 -0
  126. package/src/contact/AbstractContactStore.ts +3 -2
  127. package/src/contact/ContactStore.ts +2 -4
  128. package/src/entities/contact/ConnectionEntity.ts +1 -1
  129. package/src/entities/contact/ContactEntity.ts +5 -7
  130. package/src/entities/contact/CorrelationIdentifierEntity.ts +4 -4
  131. package/src/entities/contact/DidAuthConfigEntity.ts +1 -1
  132. package/src/entities/contact/IdentityEntity.ts +6 -8
  133. package/src/entities/contact/IdentityMetadataItemEntity.ts +4 -4
  134. package/src/entities/contact/OpenIdConfigEntity.ts +1 -1
  135. package/src/entities/issuanceBranding/BackgroundAttributesEntity.ts +42 -0
  136. package/src/entities/issuanceBranding/BaseLocaleBrandingEntity.ts +86 -0
  137. package/src/entities/issuanceBranding/CredentialBrandingEntity.ts +78 -0
  138. package/src/entities/issuanceBranding/CredentialLocaleBrandingEntity.ts +33 -0
  139. package/src/entities/issuanceBranding/ImageAttributesEntity.ts +57 -0
  140. package/src/entities/issuanceBranding/ImageDimensionsEntity.ts +22 -0
  141. package/src/entities/issuanceBranding/IssuerBrandingEntity.ts +72 -0
  142. package/src/entities/issuanceBranding/IssuerLocaleBrandingEntity.ts +33 -0
  143. package/src/entities/issuanceBranding/TextAttributesEntity.ts +31 -0
  144. package/src/entities/validators/index.ts +16 -0
  145. package/src/index.ts +42 -5
  146. package/src/issuanceBranding/AbstractIssuanceBrandingStore.ts +41 -0
  147. package/src/issuanceBranding/IssuanceBrandingStore.ts +544 -0
  148. package/src/migrations/generic/1-CreateContacts.ts +1 -1
  149. package/src/migrations/generic/1-CreateIssuanceBranding.ts +54 -0
  150. package/src/migrations/generic/index.ts +2 -1
  151. package/src/migrations/postgres/1685628974232-CreateIssuanceBranding.ts +83 -0
  152. package/src/migrations/sqlite/1659463069549-CreateContacts.ts +0 -1
  153. package/src/migrations/sqlite/1685628973231-CreateIssuanceBranding.ts +119 -0
  154. package/src/types/{IAbstractContactStore.ts → contact/IAbstractContactStore.ts} +3 -2
  155. package/src/types/index.ts +4 -0
  156. package/src/types/issuanceBranding/IAbstractIssuanceBrandingStore.ts +85 -0
  157. package/src/types/issuanceBranding/issuanceBranding.ts +120 -0
  158. package/dist/types/IAbstractContactStore.d.ts.map +0 -1
  159. package/dist/types/IAbstractContactStore.js.map +0 -1
  160. package/dist/types/contact.d.ts.map +0 -1
  161. package/dist/types/contact.js.map +0 -1
  162. /package/dist/types/{IAbstractContactStore.js → contact/IAbstractContactStore.js} +0 -0
  163. /package/dist/types/{contact.d.ts → contact/contact.d.ts} +0 -0
  164. /package/dist/types/{contact.js → contact/contact.js} +0 -0
  165. /package/src/types/{contact.ts → contact/contact.ts} +0 -0
@@ -1,5 +1,6 @@
1
- import { IContact, IIdentity } from '../types/contact'
2
1
  import {
2
+ IContact,
3
+ IIdentity,
3
4
  IAddIdentityArgs,
4
5
  IGetIdentityArgs,
5
6
  IGetIdentitiesArgs,
@@ -10,7 +11,7 @@ import {
10
11
  IGetContactsArgs,
11
12
  IRemoveContactArgs,
12
13
  IUpdateContactArgs,
13
- } from '../types/IAbstractContactStore'
14
+ } from '../types'
14
15
 
15
16
  export abstract class AbstractContactStore {
16
17
  abstract getContact(args: IGetContactArgs): Promise<IContact>
@@ -1,5 +1,6 @@
1
1
  import Debug from 'debug'
2
2
  import { OrPromise } from '@sphereon/ssi-types'
3
+ import { AbstractContactStore } from './AbstractContactStore'
3
4
  import {
4
5
  IAddIdentityArgs,
5
6
  IGetIdentityArgs,
@@ -11,9 +12,6 @@ import {
11
12
  IAddContactArgs,
12
13
  IUpdateContactArgs,
13
14
  IRemoveContactArgs,
14
- } from '../types/IAbstractContactStore'
15
- import { AbstractContactStore } from './AbstractContactStore'
16
- import {
17
15
  BasicConnectionConfig,
18
16
  ConnectionConfig,
19
17
  ConnectionTypeEnum,
@@ -25,7 +23,7 @@ import {
25
23
  IIdentity,
26
24
  IMetadataItem,
27
25
  IOpenIdConfig,
28
- } from '../types/contact'
26
+ } from '../types'
29
27
  import { ContactEntity, contactEntityFrom } from '../entities/contact/ContactEntity'
30
28
  import { IdentityEntity, identityEntityFrom } from '../entities/contact/IdentityEntity'
31
29
  import { IdentityMetadataItemEntity } from '../entities/contact/IdentityMetadataItemEntity'
@@ -1,6 +1,6 @@
1
1
  import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn, BaseEntity } from 'typeorm'
2
2
  import { BaseConfigEntity } from './BaseConfigEntity'
3
- import { BasicConnectionConfig, ConnectionTypeEnum, IBasicConnection, IDidAuthConfig, IOpenIdConfig } from '../../types/contact'
3
+ import { BasicConnectionConfig, ConnectionTypeEnum, IBasicConnection, IDidAuthConfig, IOpenIdConfig } from '../../types'
4
4
  import { IdentityEntity } from './IdentityEntity'
5
5
  import { OpenIdConfigEntity, openIdConfigEntityFrom } from './OpenIdConfigEntity'
6
6
  import { DidAuthConfigEntity, didAuthConfigEntityFrom } from './DidAuthConfigEntity'
@@ -10,9 +10,9 @@ import {
10
10
  PrimaryGeneratedColumn,
11
11
  UpdateDateColumn,
12
12
  } from 'typeorm'
13
- import { IBasicContact, IBasicIdentity } from '../../types/contact'
13
+ import { IBasicContact, IBasicIdentity } from '../../types'
14
14
  import { IdentityEntity, identityEntityFrom } from './IdentityEntity'
15
- import { IsNotEmpty, validate } from 'class-validator'
15
+ import { IsNotEmpty, validate, ValidationError } from 'class-validator'
16
16
 
17
17
  @Entity('Contact')
18
18
  export class ContactEntity extends BaseEntity {
@@ -55,9 +55,9 @@ export class ContactEntity extends BaseEntity {
55
55
  @BeforeInsert()
56
56
  @BeforeUpdate()
57
57
  async validate() {
58
- const validation = await validate(this)
58
+ const validation: Array<ValidationError> = await validate(this)
59
59
  if (validation.length > 0) {
60
- return Promise.reject(Error(validation[0].constraints?.isNotEmpty))
60
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
61
61
  }
62
62
  return
63
63
  }
@@ -68,9 +68,7 @@ export const contactEntityFrom = (args: IBasicContact): ContactEntity => {
68
68
  contactEntity.name = args.name
69
69
  contactEntity.alias = args.alias
70
70
  contactEntity.uri = args.uri
71
- if (args.identities) {
72
- contactEntity.identities = args.identities.map((identity: IBasicIdentity) => identityEntityFrom(identity))
73
- }
71
+ contactEntity.identities = args.identities ? args.identities.map((identity: IBasicIdentity) => identityEntityFrom(identity)) : []
74
72
 
75
73
  return contactEntity
76
74
  }
@@ -1,7 +1,7 @@
1
1
  import { Entity, Column, PrimaryGeneratedColumn, BaseEntity, OneToOne, JoinColumn, BeforeInsert, BeforeUpdate } from 'typeorm'
2
- import { CorrelationIdentifierEnum, BasicCorrelationIdentifier } from '../../types/contact'
2
+ import { CorrelationIdentifierEnum, BasicCorrelationIdentifier } from '../../types'
3
3
  import { IdentityEntity } from './IdentityEntity'
4
- import { IsNotEmpty, validate } from 'class-validator'
4
+ import { IsNotEmpty, validate, ValidationError } from 'class-validator'
5
5
 
6
6
  @Entity('CorrelationIdentifier')
7
7
  export class CorrelationIdentifierEntity extends BaseEntity {
@@ -24,9 +24,9 @@ export class CorrelationIdentifierEntity extends BaseEntity {
24
24
  @BeforeInsert()
25
25
  @BeforeUpdate()
26
26
  async validate() {
27
- const validation = await validate(this)
27
+ const validation: Array<ValidationError> = await validate(this)
28
28
  if (validation.length > 0) {
29
- return Promise.reject(Error(validation[0].constraints?.isNotEmpty))
29
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
30
30
  }
31
31
  return
32
32
  }
@@ -1,6 +1,6 @@
1
1
  import { ChildEntity, Column, JoinColumn, OneToOne } from 'typeorm'
2
2
  import { BaseConfigEntity } from './BaseConfigEntity'
3
- import { BasicDidAuthConfig } from '../../types/contact'
3
+ import { BasicDidAuthConfig } from '../../types'
4
4
  import { ConnectionEntity } from './ConnectionEntity'
5
5
 
6
6
  @ChildEntity('DidAuthConfig')
@@ -12,12 +12,12 @@ import {
12
12
  BeforeInsert,
13
13
  BeforeUpdate,
14
14
  } from 'typeorm'
15
+ import { IsNotEmpty, validate, ValidationError } from 'class-validator'
15
16
  import { correlationIdentifierEntityFrom, CorrelationIdentifierEntity } from './CorrelationIdentifierEntity'
16
17
  import { ConnectionEntity, connectionEntityFrom } from './ConnectionEntity'
17
- import { BasicMetadataItem, IBasicIdentity, IdentityRoleEnum } from '../../types/contact'
18
- import { ContactEntity } from './ContactEntity'
19
18
  import { IdentityMetadataItemEntity, metadataItemEntityFrom } from './IdentityMetadataItemEntity'
20
- import { IsNotEmpty, validate } from 'class-validator'
19
+ import { BasicMetadataItem, IBasicIdentity, IdentityRoleEnum } from '../../types'
20
+ import { ContactEntity } from './ContactEntity'
21
21
 
22
22
  @Entity('Identity')
23
23
  export class IdentityEntity extends BaseEntity {
@@ -84,9 +84,9 @@ export class IdentityEntity extends BaseEntity {
84
84
  @BeforeInsert()
85
85
  @BeforeUpdate()
86
86
  async validate() {
87
- const validation = await validate(this)
87
+ const validation: Array<ValidationError> = await validate(this)
88
88
  if (validation.length > 0) {
89
- return Promise.reject(Error(validation[0].constraints?.isNotEmpty))
89
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
90
90
  }
91
91
  return
92
92
  }
@@ -97,9 +97,7 @@ export const identityEntityFrom = (args: IBasicIdentity): IdentityEntity => {
97
97
  identityEntity.alias = args.alias
98
98
  identityEntity.roles = args.roles
99
99
  identityEntity.identifier = correlationIdentifierEntityFrom(args.identifier)
100
- if (args.connection) {
101
- identityEntity.connection = connectionEntityFrom(args.connection)
102
- }
100
+ identityEntity.connection = args.connection ? connectionEntityFrom(args.connection) : undefined
103
101
  identityEntity.metadata = args.metadata ? args.metadata.map((item: BasicMetadataItem) => metadataItemEntityFrom(item)) : []
104
102
 
105
103
  return identityEntity
@@ -1,7 +1,7 @@
1
1
  import { Entity, Column, PrimaryGeneratedColumn, BaseEntity, ManyToOne, BeforeInsert, BeforeUpdate } from 'typeorm'
2
- import { BasicMetadataItem } from '../../types/contact'
2
+ import { BasicMetadataItem } from '../../types'
3
3
  import { IdentityEntity } from './IdentityEntity'
4
- import { IsNotEmpty, validate } from 'class-validator'
4
+ import { IsNotEmpty, validate, ValidationError } from 'class-validator'
5
5
 
6
6
  @Entity('IdentityMetadata')
7
7
  export class IdentityMetadataItemEntity extends BaseEntity {
@@ -22,9 +22,9 @@ export class IdentityMetadataItemEntity extends BaseEntity {
22
22
  @BeforeInsert()
23
23
  @BeforeUpdate()
24
24
  async validate() {
25
- const validation = await validate(this)
25
+ const validation: Array<ValidationError> = await validate(this)
26
26
  if (validation.length > 0) {
27
- return Promise.reject(Error(validation[0].constraints?.isNotEmpty))
27
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
28
28
  }
29
29
  return
30
30
  }
@@ -1,6 +1,6 @@
1
1
  import { ChildEntity, Column, JoinColumn, OneToOne } from 'typeorm'
2
2
  import { BaseConfigEntity } from './BaseConfigEntity'
3
- import { BasicOpenIdConfig } from '../../types/contact'
3
+ import { BasicOpenIdConfig } from '../../types'
4
4
  import { ConnectionEntity } from './ConnectionEntity'
5
5
 
6
6
  @ChildEntity('OpenIdConfig')
@@ -0,0 +1,42 @@
1
+ import { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'
2
+ import { IBasicBackgroundAttributes } from '../../types'
3
+ import { ImageAttributesEntity, imageAttributesEntityFrom } from './ImageAttributesEntity'
4
+ import { validate, Validate, ValidationError } from 'class-validator'
5
+ import { isEmptyString, IsNonEmptyStringConstraint } from '../validators'
6
+
7
+ @Entity('BackgroundAttributes')
8
+ export class BackgroundAttributesEntity extends BaseEntity {
9
+ @PrimaryGeneratedColumn('uuid')
10
+ id!: string
11
+
12
+ @Column({ name: 'color', length: 255, nullable: true, unique: false })
13
+ @Validate(IsNonEmptyStringConstraint, { message: 'Blank background colors are not allowed' })
14
+ color?: string
15
+
16
+ @OneToOne(() => ImageAttributesEntity, {
17
+ cascade: true,
18
+ onDelete: 'CASCADE',
19
+ eager: true,
20
+ nullable: true,
21
+ })
22
+ @JoinColumn({ name: 'imageId' })
23
+ image?: ImageAttributesEntity
24
+
25
+ @BeforeInsert()
26
+ @BeforeUpdate()
27
+ async validate(): Promise<undefined> {
28
+ const validation: Array<ValidationError> = await validate(this)
29
+ if (validation.length > 0) {
30
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
31
+ }
32
+ return
33
+ }
34
+ }
35
+
36
+ export const backgroundAttributesEntityFrom = (args: IBasicBackgroundAttributes): BackgroundAttributesEntity => {
37
+ const backgroundAttributesEntity: BackgroundAttributesEntity = new BackgroundAttributesEntity()
38
+ backgroundAttributesEntity.color = isEmptyString(args.color) ? undefined : args.color
39
+ backgroundAttributesEntity.image = args.image ? imageAttributesEntityFrom(args.image) : undefined
40
+
41
+ return backgroundAttributesEntity
42
+ }
@@ -0,0 +1,86 @@
1
+ import {
2
+ BaseEntity,
3
+ BeforeInsert,
4
+ BeforeUpdate,
5
+ Column,
6
+ CreateDateColumn,
7
+ Entity,
8
+ JoinColumn,
9
+ OneToOne,
10
+ PrimaryGeneratedColumn,
11
+ TableInheritance,
12
+ UpdateDateColumn,
13
+ } from 'typeorm'
14
+ import { ImageAttributesEntity } from './ImageAttributesEntity'
15
+ import { BackgroundAttributesEntity } from './BackgroundAttributesEntity'
16
+ import { TextAttributesEntity } from './TextAttributesEntity'
17
+ import { validate, Validate, ValidationError } from 'class-validator'
18
+ import { IsNonEmptyStringConstraint } from '../validators'
19
+
20
+ @Entity('BaseLocaleBranding')
21
+ @TableInheritance({ column: { type: 'varchar', name: 'type' } })
22
+ export class BaseLocaleBrandingEntity extends BaseEntity {
23
+ @PrimaryGeneratedColumn('uuid')
24
+ id!: string
25
+
26
+ @Column({ name: 'alias', length: 255, nullable: true, unique: false })
27
+ @Validate(IsNonEmptyStringConstraint, { message: 'Blank aliases are not allowed' })
28
+ alias?: string
29
+
30
+ @Column({ name: 'locale', length: 255, nullable: false, unique: false })
31
+ locale?: string
32
+
33
+ @OneToOne(() => ImageAttributesEntity, {
34
+ cascade: true,
35
+ onDelete: 'CASCADE',
36
+ eager: true,
37
+ nullable: true,
38
+ })
39
+ @JoinColumn({ name: 'logoId' })
40
+ logo?: ImageAttributesEntity
41
+
42
+ @Column({ name: 'description', length: 255, nullable: true, unique: false })
43
+ @Validate(IsNonEmptyStringConstraint, { message: 'Blank descriptions are not allowed' })
44
+ description?: string
45
+
46
+ @OneToOne(() => BackgroundAttributesEntity, {
47
+ cascade: true,
48
+ onDelete: 'CASCADE',
49
+ eager: true,
50
+ nullable: true,
51
+ })
52
+ @JoinColumn({ name: 'backgroundId' })
53
+ background?: BackgroundAttributesEntity
54
+
55
+ @OneToOne(() => TextAttributesEntity, {
56
+ cascade: true,
57
+ onDelete: 'CASCADE',
58
+ eager: true,
59
+ nullable: true,
60
+ })
61
+ @JoinColumn({ name: 'textId' })
62
+ text?: TextAttributesEntity
63
+
64
+ @CreateDateColumn({ name: 'created_at', nullable: false })
65
+ createdAt!: Date
66
+
67
+ @UpdateDateColumn({ name: 'last_updated_at', nullable: false })
68
+ lastUpdatedAt!: Date
69
+
70
+ // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.
71
+ @BeforeInsert()
72
+ @BeforeUpdate()
73
+ updateUpdatedDate(): void {
74
+ this.lastUpdatedAt = new Date()
75
+ }
76
+
77
+ @BeforeInsert()
78
+ @BeforeUpdate()
79
+ async validate(): Promise<undefined> {
80
+ const validation: Array<ValidationError> = await validate(this)
81
+ if (validation.length > 0) {
82
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
83
+ }
84
+ return
85
+ }
86
+ }
@@ -0,0 +1,78 @@
1
+ import {
2
+ BaseEntity,
3
+ BeforeInsert,
4
+ BeforeUpdate,
5
+ Column,
6
+ CreateDateColumn,
7
+ Entity,
8
+ Index,
9
+ OneToMany,
10
+ PrimaryGeneratedColumn,
11
+ UpdateDateColumn,
12
+ } from 'typeorm'
13
+ import { ArrayMinSize, IsNotEmpty, validate, ValidationError } from 'class-validator'
14
+ import { CredentialLocaleBrandingEntity, credentialLocaleBrandingEntityFrom } from './CredentialLocaleBrandingEntity'
15
+ import { IBasicCredentialBranding, IBasicCredentialLocaleBranding } from '../../types'
16
+
17
+ @Entity('CredentialBranding')
18
+ @Index('IDX_CredentialBrandingEntity_vcHash', ['vcHash'])
19
+ @Index('IDX_CredentialBrandingEntity_issuerCorrelationId', ['issuerCorrelationId'])
20
+ export class CredentialBrandingEntity extends BaseEntity {
21
+ @PrimaryGeneratedColumn('uuid')
22
+ id!: string
23
+
24
+ @Column({ name: 'vcHash', length: 255, nullable: false, unique: true })
25
+ @IsNotEmpty({ message: 'Blank vcHashes are not allowed' })
26
+ vcHash!: string
27
+
28
+ @Column({ name: 'issuerCorrelationId', length: 255, nullable: false, unique: false })
29
+ @IsNotEmpty({ message: 'Blank issuerCorrelationIds are not allowed' })
30
+ issuerCorrelationId!: string
31
+
32
+ @OneToMany(
33
+ () => CredentialLocaleBrandingEntity,
34
+ (credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity) => credentialLocaleBrandingEntity.credentialBranding,
35
+ {
36
+ cascade: true,
37
+ onDelete: 'CASCADE',
38
+ eager: true,
39
+ nullable: false,
40
+ }
41
+ )
42
+ @ArrayMinSize(1, { message: 'localeBranding cannot be empty' })
43
+ localeBranding!: Array<CredentialLocaleBrandingEntity>
44
+
45
+ @CreateDateColumn({ name: 'created_at', nullable: false })
46
+ createdAt!: Date
47
+
48
+ @UpdateDateColumn({ name: 'last_updated_at', nullable: false })
49
+ lastUpdatedAt!: Date
50
+
51
+ // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.
52
+ @BeforeInsert()
53
+ @BeforeUpdate()
54
+ updateUpdatedDate(): void {
55
+ this.lastUpdatedAt = new Date()
56
+ }
57
+
58
+ @BeforeInsert()
59
+ @BeforeUpdate()
60
+ async validate(): Promise<undefined> {
61
+ const validation: Array<ValidationError> = await validate(this)
62
+ if (validation.length > 0) {
63
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
64
+ }
65
+ return
66
+ }
67
+ }
68
+
69
+ export const credentialBrandingEntityFrom = (args: IBasicCredentialBranding): CredentialBrandingEntity => {
70
+ const credentialBrandingEntity: CredentialBrandingEntity = new CredentialBrandingEntity()
71
+ credentialBrandingEntity.issuerCorrelationId = args.issuerCorrelationId
72
+ credentialBrandingEntity.vcHash = args.vcHash
73
+ credentialBrandingEntity.localeBranding = args.localeBranding.map((localeBranding: IBasicCredentialLocaleBranding) =>
74
+ credentialLocaleBrandingEntityFrom(localeBranding)
75
+ )
76
+
77
+ return credentialBrandingEntity
78
+ }
@@ -0,0 +1,33 @@
1
+ import { ChildEntity, Column, JoinColumn, ManyToOne, Index } from 'typeorm'
2
+ import { IBasicCredentialLocaleBranding } from '../../types'
3
+ import { backgroundAttributesEntityFrom } from './BackgroundAttributesEntity'
4
+ import { CredentialBrandingEntity } from './CredentialBrandingEntity'
5
+ import { imageAttributesEntityFrom } from './ImageAttributesEntity'
6
+ import { BaseLocaleBrandingEntity } from './BaseLocaleBrandingEntity'
7
+ import { textAttributesEntityFrom } from './TextAttributesEntity'
8
+ import { isEmptyString } from '../validators'
9
+
10
+ @ChildEntity('CredentialLocaleBranding')
11
+ @Index('IDX_CredentialLocaleBrandingEntity_credentialBranding_locale', ['credentialBranding', 'locale'], { unique: true })
12
+ export class CredentialLocaleBrandingEntity extends BaseLocaleBrandingEntity {
13
+ @ManyToOne(() => CredentialBrandingEntity, (credentialBranding: CredentialBrandingEntity) => credentialBranding.localeBranding, {
14
+ onDelete: 'CASCADE',
15
+ })
16
+ @JoinColumn({ name: 'credentialBrandingId' })
17
+ credentialBranding!: CredentialBrandingEntity
18
+
19
+ @Column({ name: 'credentialBrandingId', nullable: false })
20
+ credentialBrandingId!: string
21
+ }
22
+
23
+ export const credentialLocaleBrandingEntityFrom = (args: IBasicCredentialLocaleBranding): CredentialLocaleBrandingEntity => {
24
+ const credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity = new CredentialLocaleBrandingEntity()
25
+ credentialLocaleBrandingEntity.alias = isEmptyString(args.alias) ? undefined : args.alias
26
+ credentialLocaleBrandingEntity.locale = args.locale ? args.locale : ''
27
+ credentialLocaleBrandingEntity.logo = args.logo ? imageAttributesEntityFrom(args.logo) : undefined
28
+ credentialLocaleBrandingEntity.description = isEmptyString(args.description) ? undefined : args.description
29
+ credentialLocaleBrandingEntity.background = args.background ? backgroundAttributesEntityFrom(args.background) : undefined
30
+ credentialLocaleBrandingEntity.text = args.text ? textAttributesEntityFrom(args.text) : undefined
31
+
32
+ return credentialLocaleBrandingEntity
33
+ }
@@ -0,0 +1,57 @@
1
+ import { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'
2
+ import { IBasicImageAttributes } from '../../types'
3
+ import { ImageDimensionsEntity, imageDimensionsEntityFrom } from './ImageDimensionsEntity'
4
+ import { validate, Validate, ValidationError } from 'class-validator'
5
+ import { isEmptyString, IsNonEmptyStringConstraint } from '../validators'
6
+
7
+ @Entity('ImageAttributes')
8
+ export class ImageAttributesEntity extends BaseEntity {
9
+ @PrimaryGeneratedColumn('uuid')
10
+ id!: string
11
+
12
+ @Column({ name: 'uri', length: 255, nullable: true, unique: false })
13
+ @Validate(IsNonEmptyStringConstraint, { message: 'Blank image uri are not allowed' })
14
+ uri?: string
15
+
16
+ @Column({ name: 'dataUri', length: 255, nullable: true, unique: false })
17
+ @Validate(IsNonEmptyStringConstraint, { message: 'Blank image data uri are not allowed' })
18
+ dataUri?: string
19
+
20
+ @Column({ name: 'mediaType', length: 255, nullable: true, unique: false })
21
+ @Validate(IsNonEmptyStringConstraint, { message: 'Blank image types are not allowed' })
22
+ mediaType?: string
23
+
24
+ @Column({ name: 'alt', length: 255, nullable: true, unique: false })
25
+ @Validate(IsNonEmptyStringConstraint, { message: 'Blank image alts are not allowed' })
26
+ alt?: string
27
+
28
+ @OneToOne(() => ImageDimensionsEntity, {
29
+ cascade: true,
30
+ onDelete: 'CASCADE',
31
+ eager: true,
32
+ nullable: true,
33
+ })
34
+ @JoinColumn({ name: 'dimensionsId' })
35
+ dimensions?: ImageDimensionsEntity
36
+
37
+ @BeforeInsert()
38
+ @BeforeUpdate()
39
+ async validate(): Promise<undefined> {
40
+ const validation: Array<ValidationError> = await validate(this)
41
+ if (validation.length > 0) {
42
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
43
+ }
44
+ return
45
+ }
46
+ }
47
+
48
+ export const imageAttributesEntityFrom = (args: IBasicImageAttributes): ImageAttributesEntity => {
49
+ const imageAttributesEntity: ImageAttributesEntity = new ImageAttributesEntity()
50
+ imageAttributesEntity.uri = isEmptyString(args.uri) ? undefined : args.uri
51
+ imageAttributesEntity.dataUri = isEmptyString(args.dataUri) ? undefined : args.dataUri
52
+ imageAttributesEntity.mediaType = isEmptyString(args.mediaType) ? undefined : args.mediaType
53
+ imageAttributesEntity.alt = isEmptyString(args.alt) ? undefined : args.alt
54
+ imageAttributesEntity.dimensions = args.dimensions ? imageDimensionsEntityFrom(args.dimensions) : undefined
55
+
56
+ return imageAttributesEntity
57
+ }
@@ -0,0 +1,22 @@
1
+ import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm'
2
+ import { IBasicImageDimensions } from '../../types'
3
+
4
+ @Entity('ImageDimensions')
5
+ export class ImageDimensionsEntity extends BaseEntity {
6
+ @PrimaryGeneratedColumn('uuid')
7
+ id!: string
8
+
9
+ @Column({ name: 'width', nullable: false, unique: false })
10
+ width!: number
11
+
12
+ @Column({ name: 'height', nullable: false, unique: false })
13
+ height!: number
14
+ }
15
+
16
+ export const imageDimensionsEntityFrom = (args: IBasicImageDimensions): ImageDimensionsEntity => {
17
+ const imageDimensionsEntity: ImageDimensionsEntity = new ImageDimensionsEntity()
18
+ imageDimensionsEntity.width = args.width
19
+ imageDimensionsEntity.height = args.height
20
+
21
+ return imageDimensionsEntity
22
+ }
@@ -0,0 +1,72 @@
1
+ import {
2
+ BaseEntity,
3
+ BeforeInsert,
4
+ BeforeUpdate,
5
+ Column,
6
+ CreateDateColumn,
7
+ Entity,
8
+ Index,
9
+ OneToMany,
10
+ PrimaryGeneratedColumn,
11
+ UpdateDateColumn,
12
+ } from 'typeorm'
13
+ import { ArrayMinSize, IsNotEmpty, validate, ValidationError } from 'class-validator'
14
+ import { IssuerLocaleBrandingEntity, issuerLocaleBrandingEntityFrom } from './IssuerLocaleBrandingEntity'
15
+ import { IBasicIssuerBranding, IBasicIssuerLocaleBranding } from '../../types'
16
+
17
+ @Entity('IssuerBranding')
18
+ @Index('IDX_IssuerBrandingEntity_issuerCorrelationId', ['issuerCorrelationId'])
19
+ export class IssuerBrandingEntity extends BaseEntity {
20
+ @PrimaryGeneratedColumn('uuid')
21
+ id!: string
22
+
23
+ @Column({ name: 'issuerCorrelationId', length: 255, nullable: false, unique: true })
24
+ @IsNotEmpty({ message: 'Blank issuerCorrelationIds are not allowed' })
25
+ issuerCorrelationId!: string
26
+
27
+ @OneToMany(
28
+ () => IssuerLocaleBrandingEntity,
29
+ (issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity) => issuerLocaleBrandingEntity.issuerBranding,
30
+ {
31
+ cascade: true,
32
+ onDelete: 'CASCADE',
33
+ eager: true,
34
+ nullable: false,
35
+ }
36
+ )
37
+ @ArrayMinSize(1, { message: 'localeBranding cannot be empty' })
38
+ localeBranding!: Array<IssuerLocaleBrandingEntity>
39
+
40
+ @CreateDateColumn({ name: 'created_at', nullable: false })
41
+ createdAt!: Date
42
+
43
+ @UpdateDateColumn({ name: 'last_updated_at', nullable: false })
44
+ lastUpdatedAt!: Date
45
+
46
+ // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.
47
+ @BeforeInsert()
48
+ @BeforeUpdate()
49
+ updateUpdatedDate(): void {
50
+ this.lastUpdatedAt = new Date()
51
+ }
52
+
53
+ @BeforeInsert()
54
+ @BeforeUpdate()
55
+ async validate(): Promise<undefined> {
56
+ const validation: Array<ValidationError> = await validate(this)
57
+ if (validation.length > 0) {
58
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
59
+ }
60
+ return
61
+ }
62
+ }
63
+
64
+ export const issuerBrandingEntityFrom = (args: IBasicIssuerBranding): IssuerBrandingEntity => {
65
+ const issuerBrandingEntity: IssuerBrandingEntity = new IssuerBrandingEntity()
66
+ issuerBrandingEntity.issuerCorrelationId = args.issuerCorrelationId
67
+ issuerBrandingEntity.localeBranding = args.localeBranding.map((localeBranding: IBasicIssuerLocaleBranding) =>
68
+ issuerLocaleBrandingEntityFrom(localeBranding)
69
+ )
70
+
71
+ return issuerBrandingEntity
72
+ }
@@ -0,0 +1,33 @@
1
+ import { ChildEntity, Column, Index, JoinColumn, ManyToOne } from 'typeorm'
2
+ import { IBasicIssuerLocaleBranding } from '../../types'
3
+ import { backgroundAttributesEntityFrom } from './BackgroundAttributesEntity'
4
+ import { imageAttributesEntityFrom } from './ImageAttributesEntity'
5
+ import { IssuerBrandingEntity } from './IssuerBrandingEntity'
6
+ import { BaseLocaleBrandingEntity } from './BaseLocaleBrandingEntity'
7
+ import { textAttributesEntityFrom } from './TextAttributesEntity'
8
+ import { isEmptyString } from '../validators'
9
+
10
+ @ChildEntity('IssuerLocaleBranding')
11
+ @Index('IDX_IssuerLocaleBrandingEntity_issuerBranding_locale', ['issuerBranding', 'locale'], { unique: true })
12
+ export class IssuerLocaleBrandingEntity extends BaseLocaleBrandingEntity {
13
+ @ManyToOne(() => IssuerBrandingEntity, (issuerBranding: IssuerBrandingEntity) => issuerBranding.localeBranding, {
14
+ onDelete: 'CASCADE',
15
+ })
16
+ @JoinColumn({ name: 'issuerBrandingId' })
17
+ issuerBranding!: IssuerBrandingEntity
18
+
19
+ @Column({ name: 'issuerBrandingId', nullable: false })
20
+ issuerBrandingId!: string
21
+ }
22
+
23
+ export const issuerLocaleBrandingEntityFrom = (args: IBasicIssuerLocaleBranding): IssuerLocaleBrandingEntity => {
24
+ const issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity = new IssuerLocaleBrandingEntity()
25
+ issuerLocaleBrandingEntity.alias = isEmptyString(args.alias) ? undefined : args.alias
26
+ issuerLocaleBrandingEntity.locale = args.locale ? args.locale : ''
27
+ issuerLocaleBrandingEntity.logo = args.logo ? imageAttributesEntityFrom(args.logo) : undefined
28
+ issuerLocaleBrandingEntity.description = isEmptyString(args.description) ? undefined : args.description
29
+ issuerLocaleBrandingEntity.background = args.background ? backgroundAttributesEntityFrom(args.background) : undefined
30
+ issuerLocaleBrandingEntity.text = args.text ? textAttributesEntityFrom(args.text) : undefined
31
+
32
+ return issuerLocaleBrandingEntity
33
+ }
@@ -0,0 +1,31 @@
1
+ import { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, PrimaryGeneratedColumn } from 'typeorm'
2
+ import { IBasicTextAttributes } from '../../types'
3
+ import { validate, Validate, ValidationError } from 'class-validator'
4
+ import { isEmptyString, IsNonEmptyStringConstraint } from '../validators'
5
+
6
+ @Entity('TextAttributes')
7
+ export class TextAttributesEntity extends BaseEntity {
8
+ @PrimaryGeneratedColumn('uuid')
9
+ id!: string
10
+
11
+ @Column({ name: 'color', length: 255, nullable: true, unique: false })
12
+ @Validate(IsNonEmptyStringConstraint, { message: 'Blank text colors are not allowed' })
13
+ color?: string
14
+
15
+ @BeforeInsert()
16
+ @BeforeUpdate()
17
+ async validate(): Promise<undefined> {
18
+ const validation: Array<ValidationError> = await validate(this)
19
+ if (validation.length > 0) {
20
+ return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))
21
+ }
22
+ return
23
+ }
24
+ }
25
+
26
+ export const textAttributesEntityFrom = (args: IBasicTextAttributes): TextAttributesEntity => {
27
+ const textAttributesEntity: TextAttributesEntity = new TextAttributesEntity()
28
+ textAttributesEntity.color = isEmptyString(args.color) ? undefined : args.color
29
+
30
+ return textAttributesEntity
31
+ }