@sphereon/ssi-sdk.data-store
Version:
1 lines • 641 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/entities/contact/BaseConfigEntity.ts","../src/entities/contact/ConnectionEntity.ts","../src/entities/contact/IdentityEntity.ts","../src/utils/ValidatorUtils.ts","../src/entities/contact/CorrelationIdentifierEntity.ts","../src/entities/contact/IdentityMetadataItemEntity.ts","../src/entities/contact/PartyEntity.ts","../src/entities/contact/BaseContactEntity.ts","../src/entities/contact/ContactMetadataItemEntity.ts","../src/entities/contact/ElectronicAddressEntity.ts","../src/entities/contact/PartyRelationshipEntity.ts","../src/entities/contact/PartyTypeEntity.ts","../src/entities/validators/index.ts","../src/entities/contact/PhysicalAddressEntity.ts","../src/entities/contact/DidAuthConfigEntity.ts","../src/entities/contact/NaturalPersonEntity.ts","../src/entities/contact/OpenIdConfigEntity.ts","../src/entities/contact/OrganizationEntity.ts","../src/entities/digitalCredential/DigitalCredentialEntity.ts","../src/entities/eventLogger/AuditEventEntity.ts","../src/entities/issuanceBranding/BackgroundAttributesEntity.ts","../src/entities/issuanceBranding/ImageAttributesEntity.ts","../src/entities/issuanceBranding/ImageDimensionsEntity.ts","../src/entities/issuanceBranding/BaseLocaleBrandingEntity.ts","../src/entities/issuanceBranding/TextAttributesEntity.ts","../src/entities/issuanceBranding/CredentialBrandingEntity.ts","../src/entities/issuanceBranding/CredentialLocaleBrandingEntity.ts","../src/utils/issuanceBranding/HashUtils.ts","../src/entities/issuanceBranding/CredentialClaimsEntity.ts","../src/entities/issuanceBranding/IssuerBrandingEntity.ts","../src/entities/issuanceBranding/IssuerLocaleBrandingEntity.ts","../src/entities/machineState/MachineStateInfoEntity.ts","../src/entities/oid4vcState/Oid4vcStateEntity.ts","../src/entities/presentationDefinition/DcqlQueryItemEntity.ts","../src/entities/statusList/BitstringStatusListEntryEntity.ts","../src/entities/statusList/StatusList2021EntryEntity.ts","../src/entities/statusList/StatusListEntities.ts","../src/contact/ContactStore.ts","../src/utils/FormattingUtils.ts","../src/utils/contact/MappingUtils.ts","../src/digitalCredential/DigitalCredentialStore.ts","../src/utils/SortingUtils.ts","../src/issuanceBranding/IssuanceBrandingStore.ts","../src/utils/issuanceBranding/MappingUtils.ts","../src/statusList/StatusListStore.ts","../src/utils/statusList/MappingUtils.ts","../src/eventLogger/EventLoggerStore.ts","../src/utils/eventLogger/MappingUtils.ts","../src/machineState/MachineStateStore.ts","../src/presentationDefinition/PDStore.ts","../src/utils/presentationDefinition/MappingUtils.ts","../src/migrations/generic/index.ts","../src/migrations/generic/1-CreateContacts.ts","../src/migrations/postgres/1659463079428-CreateContacts.ts","../src/migrations/sqlite/1659463069549-CreateContacts.ts","../src/migrations/generic/10-CreatePresentationDefinitions.ts","../src/migrations/postgres/1716475165345-CreatePresentationDefinitions.ts","../src/migrations/sqlite/1716475165344-CreatePresentationDefinitions.ts","../src/migrations/generic/11-FixCredentialClaimsReferenceUuid.ts","../src/migrations/postgres/1685628974232-CreateIssuanceBranding.ts","../src/migrations/postgres/1741895822987-FixCredentialClaimsReferencesUuid.ts","../src/migrations/sqlite/1685628973231-CreateIssuanceBranding.ts","../src/migrations/sqlite/1741895822987-FixCredentialClaimsReferencesUuid.ts","../src/migrations/generic/12-CreateBitstringStatusList.ts","../src/migrations/postgres/1741895823000-CreateBitstringStatusList.ts","../src/migrations/sqlite/1741895823001-CreateBitstringStatusList.ts","../src/migrations/generic/13-CreateDcqlQueryItem.ts","../src/migrations/postgres/1726588800000-CreateDcqlQueryItem.ts","../src/migrations/sqlite/1726617600000-CreateDcqlQueryItem.ts","../src/migrations/generic/14-AddLinkedVpFields.ts","../src/migrations/postgres/1763387280001-AddLinkedVpFields.ts","../src/migrations/sqlite/1763387280002-AddLinkedVpFields.ts","../src/migrations/generic/15-AddBrandingState.ts","../src/migrations/postgres/1766000000000-AddBrandingState.ts","../src/migrations/sqlite/1766000000000-AddBrandingState.ts","../src/migrations/generic/15-AddServiceMetadata.ts","../src/migrations/postgres/1764000000001-AddServiceMetadata.ts","../src/migrations/sqlite/1764000000002-AddServiceMetadata.ts","../src/migrations/generic/16-MakeOpenIdClientSecretNullable.ts","../src/migrations/postgres/1767000000001-MakeOpenIdClientSecretNullable.ts","../src/migrations/sqlite/1767000000002-MakeOpenIdClientSecretNullable.ts","../src/migrations/generic/17-AddCredentialClaimOrder.ts","../src/migrations/postgres/1768000000000-AddCredentialClaimOrder.ts","../src/migrations/sqlite/1768000000000-AddCredentialClaimOrder.ts","../src/migrations/generic/2-CreateIssuanceBranding.ts","../src/migrations/generic/3-CreateContacts.ts","../src/migrations/postgres/1690925872592-CreateContacts.ts","../src/migrations/sqlite/1690925872693-CreateContacts.ts","../src/migrations/generic/4-CreateStatusList.ts","../src/migrations/postgres/1693866470001-CreateStatusList.ts","../src/migrations/postgres/1737110469001-UpdateStatusList.ts","../src/migrations/sqlite/1693866470000-CreateStatusList.ts","../src/migrations/sqlite/1737110469000-UpdateStatusList.ts","../src/migrations/generic/5-CreateAuditEvents.ts","../src/migrations/postgres/1701634812183-CreateAuditEvents.ts","../src/migrations/sqlite/1701634819487-CreateAuditEvents.ts","../src/migrations/generic/6-CreateDigitalCredential.ts","../src/migrations/postgres/1708525189001-CreateDigitalCredential.ts","../src/migrations/sqlite/1708525189002-CreateDigitalCredential.ts","../src/migrations/generic/7-CreateMachineStateStore.ts","../src/migrations/postgres/1708797018115-CreateMachineStateStore.ts","../src/migrations/sqlite/1708796002272-CreateMachineStateStore.ts","../src/migrations/generic/8-CreateContacts.ts","../src/migrations/postgres/1710438363001-CreateContacts.ts","../src/migrations/sqlite/1710438363002-CreateContacts.ts","../src/migrations/generic/9-CreateContacts.ts","../src/migrations/postgres/1715761125001-CreateContacts.ts","../src/migrations/sqlite/1715761125002-CreateContacts.ts","../src/utils/digitalCredential/MappingUtils.ts"],"sourcesContent":["import { Entities as VeramoDataStoreEntities } from '@veramo/data-store'\nimport { BaseConfigEntity } from './entities/contact/BaseConfigEntity'\nimport { BaseContactEntity } from './entities/contact/BaseContactEntity'\nimport { ConnectionEntity } from './entities/contact/ConnectionEntity'\nimport { ContactMetadataItemEntity } from './entities/contact/ContactMetadataItemEntity'\nimport { CorrelationIdentifierEntity } from './entities/contact/CorrelationIdentifierEntity'\nimport { DidAuthConfigEntity } from './entities/contact/DidAuthConfigEntity'\nimport { ElectronicAddressEntity } from './entities/contact/ElectronicAddressEntity'\nimport { IdentityEntity } from './entities/contact/IdentityEntity'\nimport { IdentityMetadataItemEntity } from './entities/contact/IdentityMetadataItemEntity'\nimport { NaturalPersonEntity } from './entities/contact/NaturalPersonEntity'\nimport { OpenIdConfigEntity } from './entities/contact/OpenIdConfigEntity'\nimport { OrganizationEntity } from './entities/contact/OrganizationEntity'\nimport { PartyEntity } from './entities/contact/PartyEntity'\n// import { IStatusListEntity, IStatusListEntryEntity } from './types.'\nimport { PartyRelationshipEntity } from './entities/contact/PartyRelationshipEntity'\nimport { PartyTypeEntity } from './entities/contact/PartyTypeEntity'\nimport { PhysicalAddressEntity } from './entities/contact/PhysicalAddressEntity'\nimport { DigitalCredentialEntity } from './entities/digitalCredential/DigitalCredentialEntity'\nimport { AuditEventEntity } from './entities/eventLogger/AuditEventEntity'\nimport { BackgroundAttributesEntity } from './entities/issuanceBranding/BackgroundAttributesEntity'\nimport { BaseLocaleBrandingEntity } from './entities/issuanceBranding/BaseLocaleBrandingEntity'\nimport { CredentialBrandingEntity } from './entities/issuanceBranding/CredentialBrandingEntity'\nimport { CredentialClaimsEntity } from './entities/issuanceBranding/CredentialClaimsEntity'\nimport { CredentialLocaleBrandingEntity } from './entities/issuanceBranding/CredentialLocaleBrandingEntity'\nimport { ImageAttributesEntity } from './entities/issuanceBranding/ImageAttributesEntity'\nimport { ImageDimensionsEntity } from './entities/issuanceBranding/ImageDimensionsEntity'\nimport { IssuerBrandingEntity } from './entities/issuanceBranding/IssuerBrandingEntity'\nimport { IssuerLocaleBrandingEntity } from './entities/issuanceBranding/IssuerLocaleBrandingEntity'\nimport { TextAttributesEntity } from './entities/issuanceBranding/TextAttributesEntity'\nimport { MachineStateInfoEntity } from './entities/machineState/MachineStateInfoEntity'\n\nimport { Oid4vcStateEntity } from './entities/oid4vcState/Oid4vcStateEntity'\nimport { DcqlQueryItemEntity } from './entities/presentationDefinition/DcqlQueryItemEntity'\nimport { BitstringStatusListEntryEntity } from './entities/statusList/BitstringStatusListEntryEntity'\nimport { StatusListEntryEntity } from './entities/statusList/StatusList2021EntryEntity'\nimport { BitstringStatusListEntity, OAuthStatusListEntity, StatusList2021Entity, StatusListEntity } from './entities/statusList/StatusListEntities'\n// import {PartyCorrelationType} from \"@sphereon/ssi-sdk.core\";\n\nexport { ContactStore } from './contact/ContactStore'\nexport { DigitalCredentialStore } from './digitalCredential/DigitalCredentialStore'\nexport { IssuanceBrandingStore } from './issuanceBranding/IssuanceBrandingStore'\nexport { StatusListStore } from './statusList/StatusListStore'\nexport { AbstractEventLoggerStore } from '@sphereon/ssi-sdk.data-store-types'\nexport { EventLoggerStore } from './eventLogger/EventLoggerStore'\nexport { MachineStateStore } from './machineState/MachineStateStore'\nexport { PDStore } from './presentationDefinition/PDStore'\nexport {\n DataStoreMigrations,\n DataStoreEventLoggerMigrations,\n DataStoreContactMigrations,\n DataStoreDigitalCredentialMigrations,\n DataStoreIssuanceBrandingMigrations,\n DataStoreStatusListMigrations,\n DataStoreMachineStateMigrations,\n DataStorePresentationDefinitionMigrations,\n DataStoreServiceMigrations,\n DataStoreMigrationsWithVeramo,\n VeramoDataStoreMigrations,\n VeramoDataStoreEntities,\n} from './migrations'\nexport * from './types'\nexport * from './utils/contact/MappingUtils'\nexport * from './utils/digitalCredential/MappingUtils'\nexport * from './utils/eventLogger/MappingUtils'\nexport * from './utils/issuanceBranding/MappingUtils'\nexport * from './utils/presentationDefinition/MappingUtils'\n\nexport const DataStoreContactEntities = [\n BaseConfigEntity,\n ConnectionEntity,\n PartyEntity,\n IdentityEntity,\n IdentityMetadataItemEntity,\n CorrelationIdentifierEntity,\n DidAuthConfigEntity,\n OpenIdConfigEntity,\n PartyRelationshipEntity,\n PartyTypeEntity,\n BaseContactEntity,\n OrganizationEntity,\n NaturalPersonEntity,\n ElectronicAddressEntity,\n PhysicalAddressEntity,\n ContactMetadataItemEntity,\n]\n\nexport const DataStoreOid4vcStateEntities = [Oid4vcStateEntity]\nexport const DataStoreIssuanceBrandingEntities = [\n BackgroundAttributesEntity,\n CredentialBrandingEntity,\n ImageAttributesEntity,\n ImageDimensionsEntity,\n BaseLocaleBrandingEntity,\n IssuerBrandingEntity,\n TextAttributesEntity,\n CredentialLocaleBrandingEntity,\n IssuerLocaleBrandingEntity,\n CredentialClaimsEntity,\n]\n\nexport const DataStorePresentationDefinitionEntities = [DcqlQueryItemEntity]\n\nexport const DataStoreStatusListEntities = [\n StatusListEntity,\n StatusList2021Entity,\n OAuthStatusListEntity,\n BitstringStatusListEntity,\n BitstringStatusListEntryEntity,\n StatusListEntryEntity,\n]\n\nexport const DataStoreEventLoggerEntities = [AuditEventEntity]\n\nexport const DataStoreDigitalCredentialEntities = [DigitalCredentialEntity]\n\nexport const DataStoreMachineStateEntities = [MachineStateInfoEntity]\n\n// All entities combined if a party wants to enable them all at once\nexport const DataStoreEntities = [\n ...DataStoreContactEntities,\n ...DataStoreIssuanceBrandingEntities,\n ...DataStoreStatusListEntities,\n ...DataStoreEventLoggerEntities,\n ...DataStoreDigitalCredentialEntities,\n ...DataStoreMachineStateEntities,\n ...DataStorePresentationDefinitionEntities,\n // ...DataStoreOid4vcStateEntities,\n]\n\n// All entities combined with Veramo entities if a party wants to enable them all at once\nexport const DataStoreEntitiesWithVeramo = [\n ...VeramoDataStoreEntities,\n ...DataStoreEntities,\n]\n\n\nexport {\n BaseConfigEntity,\n ConnectionEntity,\n PartyEntity,\n BaseContactEntity,\n CorrelationIdentifierEntity,\n DidAuthConfigEntity,\n IdentityEntity,\n IdentityMetadataItemEntity,\n OpenIdConfigEntity,\n BackgroundAttributesEntity,\n CredentialBrandingEntity,\n ImageAttributesEntity,\n ImageDimensionsEntity,\n BaseLocaleBrandingEntity,\n IssuerBrandingEntity,\n TextAttributesEntity,\n CredentialLocaleBrandingEntity,\n IssuerLocaleBrandingEntity,\n ElectronicAddressEntity,\n PhysicalAddressEntity,\n StatusListEntity,\n StatusListEntryEntity,\n BitstringStatusListEntryEntity,\n OAuthStatusListEntity,\n StatusList2021Entity,\n BitstringStatusListEntity,\n AuditEventEntity,\n DigitalCredentialEntity,\n MachineStateInfoEntity,\n DcqlQueryItemEntity,\n ContactMetadataItemEntity,\n CredentialClaimsEntity,\n Oid4vcStateEntity,\n}\n","import { BaseEntity, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn, TableInheritance } from 'typeorm'\n\nimport { ConnectionEntity } from './ConnectionEntity'\n\n@Entity('BaseConfig')\n@TableInheritance({ column: { type: 'varchar', name: 'type' } })\nexport abstract class BaseConfigEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @OneToOne(() => ConnectionEntity, (connection: ConnectionEntity) => connection.config, {\n cascade: ['insert', 'update'],\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'connection_id' })\n connection?: ConnectionEntity\n}\n","import { ConnectionType } from '@sphereon/ssi-sdk.data-store-types'\nimport { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'\n\nimport { BaseConfigEntity } from './BaseConfigEntity'\nimport { DidAuthConfigEntity } from './DidAuthConfigEntity'\nimport { IdentityEntity } from './IdentityEntity'\nimport { OpenIdConfigEntity } from './OpenIdConfigEntity'\n\n@Entity('Connection')\nexport class ConnectionEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('simple-enum', { name: 'type', enum: ConnectionType, nullable: false })\n type!: ConnectionType\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @OneToOne(() => BaseConfigEntity, (config: OpenIdConfigEntity | DidAuthConfigEntity) => config.connection, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n config!: BaseConfigEntity\n\n @OneToOne(() => IdentityEntity, (identity: IdentityEntity) => identity.connection, {\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'identity_id' })\n identity!: IdentityEntity\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { IdentityOrigin, ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { CredentialRole } from '@sphereon/ssi-types'\nimport { IsNotEmpty, validate, ValidationError } from 'class-validator'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n JoinColumn,\n ManyToOne,\n OneToMany,\n OneToOne,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { ConnectionEntity } from './ConnectionEntity'\nimport { CorrelationIdentifierEntity } from './CorrelationIdentifierEntity'\nimport { IdentityMetadataItemEntity } from './IdentityMetadataItemEntity'\nimport { PartyEntity } from './PartyEntity'\n\n@Entity('Identity')\nexport class IdentityEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', {\n name: 'alias',\n length: 255,\n nullable: false,\n unique: true,\n })\n @IsNotEmpty({ message: 'Blank aliases are not allowed' })\n alias!: string\n\n @Column('simple-enum', { name: 'origin', enum: IdentityOrigin, nullable: false })\n origin!: IdentityOrigin\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @Column('simple-array', { name: 'roles', nullable: false })\n roles!: Array<CredentialRole>\n\n @OneToOne(() => CorrelationIdentifierEntity, (identifier: CorrelationIdentifierEntity) => identifier.identity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n identifier!: CorrelationIdentifierEntity\n\n @OneToOne(() => ConnectionEntity, (connection: ConnectionEntity) => connection.identity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n })\n connection?: ConnectionEntity\n\n @OneToMany(() => IdentityMetadataItemEntity, (metadata: IdentityMetadataItemEntity) => metadata.identity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n @JoinColumn({ name: 'metadata_id' }) // TODO check in db file\n metadata!: Array<IdentityMetadataItemEntity>\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })\n lastUpdatedAt!: Date\n\n @ManyToOne(() => PartyEntity, (party: PartyEntity) => party.identities, {\n onDelete: 'CASCADE',\n })\n party!: PartyEntity\n\n @Column('text', { name: 'partyId', nullable: true })\n partyId?: string\n\n // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.\n @BeforeInsert()\n @BeforeUpdate()\n updateUpdatedDate(): void {\n this.lastUpdatedAt = new Date()\n }\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { type ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { ValidationError } from 'class-validator'\n\nexport const getConstraint = (validation: ValidationError): ValidationConstraint | undefined => {\n if (validation.children && validation.children.length > 0) {\n return getConstraint(validation.children[0])\n } else {\n return validation.constraints\n }\n}\n","import { CorrelationIdentifierType, ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { IsNotEmpty, validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { IdentityEntity } from './IdentityEntity'\n\n@Entity('CorrelationIdentifier')\nexport class CorrelationIdentifierEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('simple-enum', { name: 'type', enum: CorrelationIdentifierType, nullable: false })\n type!: CorrelationIdentifierType\n\n @Column('text', { name: 'correlation_id', nullable: false, unique: true })\n @IsNotEmpty({ message: 'Blank correlation ids are not allowed' })\n correlationId!: string\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @OneToOne(() => IdentityEntity, (identity: IdentityEntity) => identity.identifier, {\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'identity_id' })\n identity!: IdentityEntity\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { IMetadataEntity, ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { IsNotEmpty, validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { IdentityEntity } from './IdentityEntity'\n\n@Entity('IdentityMetadata')\nexport class IdentityMetadataItemEntity extends BaseEntity implements IMetadataEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'label', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank metadata labels are not allowed' })\n label!: string\n\n @Column('varchar', { name: 'valueType', nullable: false })\n @IsNotEmpty({ message: 'valueType must not be empty' })\n valueType!: string\n\n @Column('varchar', { name: 'stringValue', length: 255, nullable: true })\n stringValue?: string\n\n @Column('numeric', { name: 'numberValue', nullable: true })\n numberValue?: number\n\n @Column({ name: 'dateValue', nullable: true, type: typeOrmDateTime() })\n dateValue?: Date\n\n @Column('boolean', { name: 'boolValue', nullable: true })\n boolValue?: boolean\n\n @ManyToOne(() => IdentityEntity, (identity: IdentityEntity) => identity.metadata, { cascade: ['insert', 'update'], onDelete: 'CASCADE' })\n identity!: IdentityEntity\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { validate, ValidationError } from 'class-validator'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n JoinColumn,\n ManyToOne,\n OneToMany,\n OneToOne,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { BaseContactEntity } from './BaseContactEntity'\nimport { ElectronicAddressEntity } from './ElectronicAddressEntity'\nimport { IdentityEntity } from './IdentityEntity'\nimport { PartyRelationshipEntity } from './PartyRelationshipEntity'\nimport { PartyTypeEntity } from './PartyTypeEntity'\nimport { PhysicalAddressEntity } from './PhysicalAddressEntity'\n\n@Entity('Party')\nexport class PartyEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'uri', length: 255, nullable: true })\n uri?: string\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @OneToMany(() => IdentityEntity, (identity: IdentityEntity) => identity.party, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n @JoinColumn({ name: 'identity_id' })\n identities!: Array<IdentityEntity>\n\n @OneToMany(() => ElectronicAddressEntity, (electronicAddress: ElectronicAddressEntity) => electronicAddress.party, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n @JoinColumn({ name: 'electronic_address_id' })\n electronicAddresses!: Array<ElectronicAddressEntity>\n\n @OneToMany(() => PhysicalAddressEntity, (physicalAddress: PhysicalAddressEntity) => physicalAddress.party, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n @JoinColumn({ name: 'physical_address_id' })\n physicalAddresses!: Array<PhysicalAddressEntity>\n\n @ManyToOne(() => PartyTypeEntity, (contactType: PartyTypeEntity) => contactType.parties, {\n cascade: true,\n nullable: false,\n eager: true,\n })\n @JoinColumn({ name: 'party_type_id' })\n partyType!: PartyTypeEntity\n\n @OneToOne(() => BaseContactEntity, (contact: BaseContactEntity) => contact.party, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n contact!: BaseContactEntity\n\n @OneToMany(() => PartyRelationshipEntity, (relationship: PartyRelationshipEntity) => relationship.left, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n @JoinColumn({ name: 'relationship_id' })\n relationships!: Array<PartyRelationshipEntity>\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })\n lastUpdatedAt!: Date\n\n // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.\n @BeforeInsert()\n @BeforeUpdate()\n updateUpdatedDate(): void {\n this.lastUpdatedAt = new Date()\n }\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n CreateDateColumn,\n Entity,\n JoinColumn,\n OneToMany,\n OneToOne,\n PrimaryGeneratedColumn,\n TableInheritance,\n UpdateDateColumn,\n} from 'typeorm'\nimport { ContactMetadataItemEntity } from './ContactMetadataItemEntity'\nimport { PartyEntity } from './PartyEntity'\n\n@Entity('BaseContact')\n@TableInheritance({ column: { type: 'varchar', name: 'type' } })\nexport abstract class BaseContactEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })\n lastUpdatedAt!: Date\n\n @OneToOne(() => PartyEntity, (party: PartyEntity) => party.contact, {\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'party_id' })\n party!: PartyEntity\n\n @OneToMany(() => ContactMetadataItemEntity, (metadata: ContactMetadataItemEntity) => metadata.contact, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n @JoinColumn({ name: 'metadata_id' })\n metadata!: Array<ContactMetadataItemEntity>\n\n // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.\n @BeforeInsert()\n @BeforeUpdate()\n updateUpdatedDate(): void {\n this.lastUpdatedAt = new Date()\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { IMetadataEntity, ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { IsNotEmpty, validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { BaseContactEntity } from './BaseContactEntity'\n\n@Entity('ContactMetadata')\nexport class ContactMetadataItemEntity extends BaseEntity implements IMetadataEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'label', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank metadata labels are not allowed' })\n label!: string\n\n @Column('varchar', { name: 'valueType', nullable: false })\n @IsNotEmpty({ message: 'valueType must not be empty' })\n valueType!: string\n\n @Column('varchar', { name: 'stringValue', length: 255, nullable: true })\n stringValue?: string\n\n @Column('numeric', { name: 'numberValue', nullable: true })\n numberValue?: number\n\n @Column({ name: 'dateValue', nullable: true, type: typeOrmDateTime() })\n dateValue?: Date\n\n @Column('boolean', { name: 'boolValue', nullable: true })\n boolValue?: boolean\n\n @ManyToOne(() => BaseContactEntity, (contact: BaseContactEntity) => contact.metadata, {\n cascade: ['insert', 'update'],\n onDelete: 'CASCADE',\n })\n contact!: BaseContactEntity\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport type { ElectronicAddressType, ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { IsNotEmpty, validate, ValidationError } from 'class-validator'\n\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n ManyToOne,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { PartyEntity } from './PartyEntity'\n\n@Entity('ElectronicAddress')\nexport class ElectronicAddressEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'type', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank electronic address types are not allowed' })\n type!: ElectronicAddressType\n\n @Column('varchar', { name: 'electronic_address', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank electronic addresses are not allowed' })\n electronicAddress!: string\n\n @ManyToOne(() => PartyEntity, (party: PartyEntity) => party.electronicAddresses, {\n onDelete: 'CASCADE',\n })\n party!: PartyEntity\n\n @Column('text', { name: 'partyId', nullable: true })\n partyId?: string\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })\n lastUpdatedAt!: Date\n\n // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.\n @BeforeInsert()\n @BeforeUpdate()\n updateUpdatedDate(): void {\n this.lastUpdatedAt = new Date()\n }\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport {\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n Index,\n JoinColumn,\n ManyToOne,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from 'typeorm'\nimport { PartyEntity } from './PartyEntity'\n\n@Entity('PartyRelationship')\n@Index('IDX_PartyRelationship_left_right', ['left', 'right'], { unique: true })\nexport class PartyRelationshipEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @ManyToOne(() => PartyEntity, {\n nullable: false,\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'left_id' })\n left!: PartyEntity\n\n @Column('text', { name: 'left_id', nullable: false })\n leftId!: string\n\n @ManyToOne(() => PartyEntity, {\n nullable: false,\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'right_id' })\n right!: PartyEntity\n\n @Column('text', { name: 'right_id', nullable: false })\n rightId!: string\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })\n lastUpdatedAt!: Date\n\n // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.\n @BeforeInsert()\n @BeforeUpdate()\n updateUpdatedDate(): void {\n this.lastUpdatedAt = new Date()\n }\n\n @BeforeInsert()\n @BeforeUpdate()\n async checkRelationshipSides(): Promise<void> {\n if ((this.left?.id ?? this.leftId) === (this.right?.id ?? this.rightId)) {\n return Promise.reject(Error('Cannot use the same id for both sides of the relationship'))\n }\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { PartyOrigin, PartyTypeType, ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { IsNotEmpty, Validate, validate, ValidationError } from 'class-validator'\nimport { BeforeInsert, BeforeUpdate, Column, CreateDateColumn, Entity, Index, OneToMany, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { PartyEntity } from './PartyEntity'\n\n@Entity('PartyType')\n@Index('IDX_PartyType_type_tenant_id', ['type', 'tenantId'], { unique: true })\nexport class PartyTypeEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('simple-enum', { name: 'type', enum: PartyTypeType, nullable: false })\n type!: PartyTypeType\n\n @Column('simple-enum', { name: 'origin', enum: PartyOrigin, nullable: false, unique: false })\n origin!: PartyOrigin\n\n @Column('varchar', { name: 'name', length: 255, nullable: false, unique: true })\n @IsNotEmpty({ message: 'Blank names are not allowed' })\n name!: string\n\n @Column('varchar', { name: 'description', length: 255, nullable: true })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank descriptions are not allowed' })\n description?: string\n\n @Column({ name: 'tenant_id', type: 'varchar', length: 255, nullable: true })\n @IsNotEmpty({ message: \"Blank tenant id's are not allowed\" })\n tenantId!: string\n\n @OneToMany(() => PartyEntity, (party: PartyEntity) => party.partyType, {\n nullable: false,\n })\n parties!: Array<PartyEntity>\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })\n lastUpdatedAt!: Date\n\n // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.\n @BeforeInsert()\n @BeforeUpdate()\n updateUpdatedDate(): void {\n this.lastUpdatedAt = new Date()\n }\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { type ValidationArguments, ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator'\n\n@ValidatorConstraint({ name: 'isNonEmptyString', async: false })\nexport class IsNonEmptyStringConstraint implements ValidatorConstraintInterface {\n validate(value: string, args: ValidationArguments): boolean {\n return !isEmptyString(value)\n }\n\n defaultMessage(args: ValidationArguments): string {\n return `${args.property} must not be an empty string.`\n }\n}\n\nexport const isEmptyString = (value: any): boolean => {\n return typeof value === 'string' && value.trim().length === 0\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport type { PhysicalAddressType, ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { IsNotEmpty, Validate, validate, ValidationError } from 'class-validator'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n ManyToOne,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { PartyEntity } from './PartyEntity'\n\n@Entity('PhysicalAddress')\nexport class PhysicalAddressEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'type', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank physical address types are not allowed' })\n type!: PhysicalAddressType\n\n @Column('varchar', { name: 'street_name', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank street names are not allowed' })\n streetName!: string\n\n @Column('varchar', { name: 'street_number', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank street numbers are not allowed' })\n streetNumber!: string\n\n @Column('varchar', { name: 'postal_code', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank postal codes are not allowed' })\n postalCode!: string\n\n @Column('varchar', { name: 'city_name', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank city names are not allowed' })\n cityName!: string\n\n @Column('varchar', { name: 'province_name', length: 255, nullable: false })\n @IsNotEmpty({ message: 'Blank province names are not allowed' })\n provinceName!: string\n\n @Column('varchar', { name: 'country_code', length: 2, nullable: false })\n @IsNotEmpty({ message: 'Blank country codes are not allowed' })\n countryCode!: string\n\n @Column('varchar', { name: 'building_name', length: 255, nullable: true })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank building names are not allowed' })\n buildingName?: string\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @ManyToOne(() => PartyEntity, (party: PartyEntity) => party.physicalAddresses, {\n onDelete: 'CASCADE',\n })\n party!: PartyEntity\n\n @Column('text', { name: 'partyId', nullable: true })\n partyId?: string\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })\n lastUpdatedAt!: Date\n\n // By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.\n @BeforeInsert()\n @BeforeUpdate()\n updateUpdatedDate(): void {\n this.lastUpdatedAt = new Date()\n }\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { ChildEntity, Column } from 'typeorm'\nimport { BaseConfigEntity } from './BaseConfigEntity'\n\n@ChildEntity('DidAuthConfig')\nexport class DidAuthConfigEntity extends BaseConfigEntity {\n @Column('varchar', { name: 'identifier', length: 255, nullable: false })\n identifier!: string\n\n @Column('varchar', { name: 'redirect_url', length: 255, nullable: false })\n redirectUrl!: string\n\n @Column('varchar', { name: 'session_id', length: 255, nullable: false })\n sessionId!: string\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n}\n","import { ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { IsNotEmpty, validate, Validate, ValidationError } from 'class-validator'\nimport { BeforeInsert, BeforeUpdate, ChildEntity, Column } from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { BaseContactEntity } from './BaseContactEntity'\n\n@ChildEntity('NaturalPerson')\nexport class NaturalPersonEntity extends BaseContactEntity {\n @Column('varchar', { name: 'first_name', length: 255, nullable: false, unique: false })\n @IsNotEmpty({ message: 'Blank first names are not allowed' })\n firstName!: string\n\n @Column('varchar', { name: 'middle_name', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank middle names are not allowed' })\n middleName?: string\n\n @Column('varchar', { name: 'last_name', length: 255, nullable: false, unique: false })\n @IsNotEmpty({ message: 'Blank last names are not allowed' })\n lastName!: string\n\n @Column('varchar', { name: 'display_name', length: 255, nullable: false, unique: false })\n @IsNotEmpty({ message: 'Blank display names are not allowed' })\n displayName!: string\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { ChildEntity, Column } from 'typeorm'\nimport { BaseConfigEntity } from './BaseConfigEntity'\n\n@ChildEntity('OpenIdConfig')\nexport class OpenIdConfigEntity extends BaseConfigEntity {\n @Column('varchar', { name: 'client_id', length: 255, nullable: false })\n clientId!: string\n\n @Column('varchar', { name: 'client_secret', length: 255, nullable: true })\n clientSecret?: string\n\n @Column('simple-array', { name: 'scopes', nullable: false })\n scopes!: Array<string>\n\n @Column('varchar', { name: 'issuer', length: 255, nullable: false })\n issuer!: string\n\n @Column('text', { name: 'redirect_url', nullable: false })\n redirectUrl!: string\n\n @Column('boolean', { name: 'dangerously_allow_insecure_http_requests', nullable: false })\n dangerouslyAllowInsecureHttpRequests!: boolean\n\n @Column('text', { name: 'client_auth_method', nullable: false })\n clientAuthMethod!: 'basic' | 'post' | undefined\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n}\n","import { ValidationConstraint } from '@sphereon/ssi-sdk.data-store-types'\nimport { IsNotEmpty, validate, ValidationError } from 'class-validator'\nimport { BeforeInsert, BeforeUpdate, ChildEntity, Column } from 'typeorm'\nimport { getConstraint } from '../../utils/ValidatorUtils'\nimport { BaseContactEntity } from './BaseContactEntity'\n\n@ChildEntity('Organization')\nexport class OrganizationEntity extends BaseContactEntity {\n @Column('varchar', { name: 'legal_name', length: 255, nullable: false, unique: true })\n @IsNotEmpty({ message: 'Blank legal names are not allowed' })\n legalName!: string\n\n @Column('varchar', { name: 'display_name', length: 255, nullable: false, unique: false })\n @IsNotEmpty({ message: 'Blank display names are not allowed' })\n displayName!: string\n\n @Column('text', { name: 'owner_id', nullable: true })\n ownerId?: string\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<void> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n const constraint: ValidationConstraint | undefined = getConstraint(validation[0])\n if (constraint) {\n const message: string = Object.values(constraint!)[0]\n return Promise.reject(Error(message))\n }\n }\n }\n}\n","import { typeormDate, typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\n\nimport {\n CredentialCorrelationType,\n CredentialDocumentFormat,\n CredentialStateType,\n type DigitalCredential,\n DocumentType,\n RegulationType,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { CredentialRole } from '@sphereon/ssi-types'\nimport { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'\n\n@Entity('DigitalCredential')\nexport class DigitalCredentialEntity extends BaseEntity implements DigitalCredential {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('text', { name: 'parent_id', nullable: true })\n parentId?: string\n\n @Column('simple-enum', { name: 'document_type', enum: DocumentType, nullable: false })\n documentType!: DocumentType\n\n @Column('simple-enum', { name: 'regulation_type', enum: RegulationType, nullable: false })\n regulationType!: RegulationType\n\n @Column('simple-enum', { name: 'document_format', enum: CredentialDocumentFormat, nullable: false })\n documentFormat!: CredentialDocumentFormat\n\n @Column('simple-enum', { name: 'credential_role', enum: CredentialRole, nullable: false })\n credentialRole!: CredentialRole\n\n @Column('text', { name: 'raw_document', nullable: false })\n rawDocument!: string\n\n @Column('text', { name: 'uniform_document', nullable: false })\n uniformDocument!: string\n\n @Column('text', { name: 'credential_id', nullable: true, unique: false })\n credentialId!: string\n\n @Column('text', { name: 'hash', nullable: false, unique: true })\n hash!: string\n\n @Column('text', { name: 'kms_key_ref', nullable: true })\n kmsKeyRef!: string\n\n @Column('text', { name: 'identifier_method', nullable: true })\n identifierMethod!: string\n\n @Column('simple-enum', { name: 'issuer_correlation_type', enum: CredentialCorrelationType, nullable: false })\n issuerCorrelationType!: CredentialCorrelationType\n\n @Column('simple-enum', { name: 'subject_correlation_type', enum: CredentialCorrelationType, nullable: true })\n subjectCorrelationType?: CredentialCorrelationType\n\n @Column('simple-enum', { name: 'rp_correlation_type', enum: CredentialCorrelationType, nullable: true })\n rpCorrelationType?: CredentialCorrelationType\n\n @Column('boolean', { name: 'issuer_signed', nullable: true })\n isIssuerSigned?: boolean\n\n @Column('text', { name: 'issuer_correlation_id', nullable: false })\n issuerCorrelationId!: string\n\n @Column('text', { name: 'subject_correlation_id', nullable: true })\n subjectCorrelationId?: string\n\n @Column('text', { name: 'rp_correlation_id', nullable: true })\n rpCorrelationId?: string\n\n @Column('simple-enum', { name: 'verified_state', enum: CredentialStateType, nullable: true })\n verifiedState?: CredentialStateType\n\n @Column('text', { name: 'tenant_id', nullable: true })\n tenantId?: string\n\n @Column('text', { name: 'linked_vp_id', nullable: true })\n linkedVpId?: string\n\n @Column({ name: 'linked_vp_from', nullable: true, type: typeOrmDateTime() })\n linkedVpFrom?: Date\n\n @Column({ name: 'linked_vp_until', nullable: true, type: typeOrmDateTime() })\n linkedVpUntil?: Date\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @Column({ name: 'presented_at', nullable: true, type: typeormDate() })\n presentedAt?: Date\n\n @UpdateDateColumn({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })\n lastUpdatedAt!: Date\n\n @Column({ name: 'valid_until', nullable: true, type: typeormDate() })\n validUntil?: Date\n\n @Column({ name: 'valid_from', nullable: true, type: typeormDate() })\n validFrom?: Date\n\n @Column({ name: 'verified_at', nullable: true, type: typeOrmDateTime() })\n verifiedAt?: Date\n\n @Column({ name: 'revoked_at', nullable: true, type: typeOrmDateTime() })\n revokedAt?: Date\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { CredentialType, PartyCorrelationType } from '@sphereon/ssi-sdk.core'\nimport {\n type ActionSubType,\n ActionType,\n InitiatorType,\n LoggingEventType,\n LogLevel,\n SubSystem,\n System,\n SystemCorrelationIdType,\n} from '@sphereon/ssi-types'\nimport { BaseEntity, Column, CreateDa