@sphereon/ssi-sdk.data-store 0.36.1-next.11 → 0.36.1-next.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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/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/index.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/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/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/migrations/generic/index.ts","../src/utils/digitalCredential/MappingUtils.ts"],"sourcesContent":["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: false })\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 @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, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'\n\n//TODO this entity, also contains some optional fields that are related to another event type (Activity) later we might want to refactor and reorganize this.\n// For now I've added a discriminator value called eventType that can be one of the three types of events: 1. General, 2. Audit, and 3. Activity\n@Entity('AuditEvents')\nexport class AuditEventEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column({ name: 'timestamp', nullable: false, unique: false, type: typeOrmDateTime() })\n timestamp!: Date\n\n @Column('simple-enum', { name: 'eventType', enum: LoggingEventType, nullable: false, unique: false })\n type!: LoggingEventType\n\n @Column('simple-enum', { name: 'level', enum: LogLevel, nullable: false, unique: false })\n level!: LogLevel\n\n @Column('text', { name: 'correlationId', nullable: false, unique: false })\n correlationId!: string\n\n @Column('simple-enum', { name: 'system', enum: System, nullable: false, unique: false })\n system!: System\n\n @Column('simple-enum', { name: 'subSystemType', enum: SubSystem, nullable: false, unique: false })\n subSystemType!: SubSystem\n\n @Column('simple-enum', { name: 'actionType', enum: ActionType, nullable: false, unique: false })\n actionType!: ActionType\n\n @Column({ name: 'actionSubType', type: 'varchar', nullable: false, unique: false })\n actionSubType!: ActionSubType\n\n @Column('simple-enum', { name: 'initiatorType', enum: InitiatorType, nullable: false, unique: false })\n initiatorType!: InitiatorType\n\n @Column('simple-enum', { name: 'systemCorrelationIdType', enum: SystemCorrelationIdType, nullable: true, unique: false })\n systemCorrelationIdType?: SystemCorrelationIdType\n\n @Column('text', { name: 'systemCorrelationId', nullable: true, unique: false })\n systemCorrelationId?: string\n\n @Column('text', { name: 'systemAlias', nullable: true, unique: false })\n systemAlias?: string\n\n @Column('simple-enum', { name: 'partyCorrelationType', enum: PartyCorrelationType, nullable: true, unique: false })\n partyCorrelationType?: PartyCorrelationType\n\n @Column('text', { name: 'partyCorrelationId', nullable: true, unique: false })\n partyCorrelationId?: string\n\n @Column('text', { name: 'partyAlias', nullable: true, unique: false })\n partyAlias?: string\n\n @Column('text', { name: 'description', nullable: false, unique: false })\n description!: string\n\n @Column('simple-enum', { name: 'credentialType', enum: CredentialType, nullable: true, unique: false })\n credentialType?: CredentialType\n\n @Column('text', { name: 'credentialHash', nullable: true, unique: false })\n credentialHash?: string\n\n @Column('text', { name: 'parentCredentialHash', nullable: true, unique: false })\n parentCredentialHash?: string\n\n @Column('text', { name: 'originalCredential', nullable: true, unique: false })\n originalCredential?: string\n\n @Column('text', { name: 'sharePurpose', nullable: true, unique: false })\n sharePurpose?: string\n\n @Column('text', { name: 'data', nullable: true, unique: false })\n data?: string\n\n @Column('text', { name: 'diagnosticData', nullable: true, unique: false })\n diagnosticData?: 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","import { validate, Validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { ImageAttributesEntity } from './ImageAttributesEntity'\n\n@Entity('BackgroundAttributes')\nexport class BackgroundAttributesEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'color', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank background colors are not allowed' })\n color?: string\n\n @OneToOne(() => ImageAttributesEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'imageId' })\n image?: ImageAttributesEntity\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { validate, Validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { ImageDimensionsEntity } from './ImageDimensionsEntity'\n\n@Entity('ImageAttributes')\nexport class ImageAttributesEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('text', { name: 'uri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank image uri are not allowed' })\n uri?: string\n\n @Column('text', { name: 'dataUri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank image data uri are not allowed' })\n dataUri?: string\n\n @Column('varchar', { name: 'mediaType', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank image types are not allowed' })\n mediaType?: string\n\n @Column('varchar', { name: 'alt', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank image alts are not allowed' })\n alt?: string\n\n @OneToOne(() => ImageDimensionsEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'dimensionsId' })\n dimensions?: ImageDimensionsEntity\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm'\n\n@Entity('ImageDimensions')\nexport class ImageDimensionsEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('integer', { name: 'width', nullable: false, unique: false })\n width!: number\n\n @Column('integer', { name: 'height', nullable: false, unique: false })\n height!: number\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { validate, Validate, ValidationError } from 'class-validator'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n JoinColumn,\n OneToOne,\n PrimaryGeneratedColumn,\n TableInheritance,\n UpdateDateColumn,\n} from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { BackgroundAttributesEntity } from './BackgroundAttributesEntity'\nimport { ImageAttributesEntity } from './ImageAttributesEntity'\nimport { TextAttributesEntity } from './TextAttributesEntity'\n\n@Entity('BaseLocaleBranding')\n@TableInheritance({ column: { type: 'varchar', name: 'type' } })\nexport class BaseLocaleBrandingEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'alias', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank aliases are not allowed' })\n alias?: string\n\n @Column('varchar', { name: 'locale', length: 255, nullable: false, unique: false })\n locale?: string\n\n @OneToOne(() => ImageAttributesEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'logoId' })\n logo?: ImageAttributesEntity\n\n @Column('varchar', { name: 'description', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank descriptions are not allowed' })\n description?: string\n\n @OneToOne(() => BackgroundAttributesEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'backgroundId' })\n background?: BackgroundAttributesEntity\n\n @OneToOne(() => TextAttributesEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'textId' })\n text?: TextAttributesEntity\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<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { validate, Validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, PrimaryGeneratedColumn } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\n\n@Entity('TextAttributes')\nexport class TextAttributesEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'color', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank text colors are not allowed' })\n color?: string\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { ArrayMinSize, IsNotEmpty, validate, ValidationError } from 'class-validator'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n Index,\n OneToMany,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from 'typeorm'\nimport { CredentialLocaleBrandingEntity } from './CredentialLocaleBrandingEntity'\n\n@Entity('CredentialBranding')\n@Index('IDX_CredentialBrandingEntity_vcHash', ['vcHash'])\n@Index('IDX_CredentialBrandingEntity_issuerCorrelationId', ['issuerCorrelationId'])\nexport class CredentialBrandingEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'vcHash', length: 255, nullable: false, unique: true })\n @IsNotEmpty({ message: 'Blank vcHashes are not allowed' })\n vcHash!: string\n\n @Column('varchar', { name: 'issuerCorrelationId', length: 255, nullable: false, unique: false })\n @IsNotEmpty({ message: 'Blank issuerCorrelationIds are not allowed' })\n issuerCorrelationId!: string\n\n @OneToMany(\n () => CredentialLocaleBrandingEntity,\n (credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity) => credentialLocaleBrandingEntity.credentialBranding,\n {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n },\n )\n @ArrayMinSize(1, { message: 'localeBranding cannot be empty' })\n localeBranding!: Array<CredentialLocaleBrandingEntity>\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<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { ChildEntity, Column, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm'\nimport { BaseLocaleBrandingEntity } from './BaseLocaleBrandingEntity'\nimport { CredentialBrandingEntity } from './CredentialBrandingEntity'\nimport { CredentialClaimsEntity } from './CredentialClaimsEntity'\n\n@ChildEntity('CredentialLocaleBranding')\n@Index('IDX_CredentialLocaleBrandingEntity_credentialBranding_locale', ['credentialBranding', 'locale'], { unique: true })\nexport class CredentialLocaleBrandingEntity extends BaseLocaleBrandingEntity {\n @ManyToOne(() => CredentialBrandingEntity, (credentialBranding: CredentialBrandingEntity) => credentialBranding.localeBranding, {\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'credentialBrandingId' })\n credentialBranding!: CredentialBrandingEntity\n\n @OneToMany(() => CredentialClaimsEntity, (claims: CredentialClaimsEntity) => claims.credentialLocaleBranding, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n @JoinColumn({ name: 'claim_id' })\n claims!: Array<CredentialClaimsEntity>\n\n @Column('uuid', { name: 'credentialBrandingId', nullable: false })\n credentialBrandingId!: string\n}\n","import { validate, Validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { CredentialLocaleBrandingEntity } from './CredentialLocaleBrandingEntity'\n\n@Entity('CredentialClaims')\n@Index('IDX_CredentialClaimsEntity_credentialLocaleBranding_locale', ['credentialLocaleBranding', 'key'], { unique: true })\nexport class CredentialClaimsEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'key', length: 255, nullable: false, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank claim keys are not allowed' })\n key!: string\n\n @Column('varchar', { name: 'name', length: 255, nullable: false, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank claim names are not allowed' })\n name!: string\n\n @ManyToOne(() => CredentialLocaleBrandingEntity, (credentialLocaleBranding: CredentialLocaleBrandingEntity) => credentialLocaleBranding.claims, {\n cascade: ['insert', 'update'],\n onDelete: 'CASCADE',\n })\n credentialLocaleBranding!: CredentialLocaleBrandingEntity\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { ArrayMinSize, IsNotEmpty, validate, ValidationError } from 'class-validator'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n Index,\n OneToMany,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from 'typeorm'\nimport { IssuerLocaleBrandingEntity } from './IssuerLocaleBrandingEntity'\n\n@Entity('IssuerBranding')\n@Index('IDX_IssuerBrandingEntity_issuerCorrelationId', ['issuerCorrelationId'])\nexport class IssuerBrandingEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'issuerCorrelationId', length: 255, nullable: false, unique: true })\n @IsNotEmpty({ message: 'Blank issuerCorrelationIds are not allowed' })\n issuerCorrelationId!: string\n\n @OneToMany(\n () => IssuerLocaleBrandingEntity,\n (issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity) => issuerLocaleBrandingEntity.issuerBranding,\n {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n },\n )\n @ArrayMinSize(1, { message: 'localeBranding cannot be empty' })\n localeBranding!: Array<IssuerLocaleBrandingEntity>\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<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { Validate } from 'class-validator'\nimport { ChildEntity, Column, Index, JoinColumn, ManyToOne } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { BaseLocaleBrandingEntity } from './BaseLocaleBrandingEntity'\nimport { IssuerBrandingEntity } from './IssuerBrandingEntity'\n\n@ChildEntity('IssuerLocaleBranding')\n@Index('IDX_IssuerLocaleBrandingEntity_issuerBranding_locale', ['issuerBranding', 'locale'], { unique: true })\nexport class IssuerLocaleBrandingEntity extends BaseLocaleBrandingEntity {\n @ManyToOne(() => IssuerBrandingEntity, (issuerBranding: IssuerBrandingEntity) => issuerBranding.localeBranding, {\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'issuerBrandingId' })\n issuerBranding!: IssuerBrandingEntity\n\n @Column('text', { name: 'client_uri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank client uris are not allowed' })\n clientUri?: string\n\n @Column('text', { name: 'tos_uri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank tos uris are not allowed' })\n tosUri?: string\n\n @Column('text', { name: 'policy_uri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank policy uris are not allowed' })\n policyUri?: string\n\n @Column('simple-array', { name: 'contacts', nullable: true, unique: false })\n contacts?: Array<string>\n\n @Column('text', { name: 'issuerBrandingId', nullable: false })\n issuerBrandingId!: string\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { BaseEntity, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from 'typeorm'\n\n/**\n * @class MachineStateInfoEntity\n * Represents a machine state. It allows to continue a machine at a later point in time at the point it was left of\n *\n * @param {string} instanceId - The instance ID of the machine state.\n * @param {string} [sessionId] - The session ID of the machine state. (optional)\n * @param {string} machineName - The name of the machine.\n * @param {string} [latestStateName] - The name of the latest state. (optional)\n * @param {string} latestEventType - The type of the latest event.\n * @param {string} state - The current state of the machine.\n * @param {Date} createdAt - The date and time when the machine state was created.\n * @param {Date} updatedAt - The date and time when the machine state was last updated.\n * @param {number} updatedCount - The number of times the machine state has been updated.\n * @param {Date} [expiresAt] - The date and time when the machine state expires. (optional)\n * @param {Date} [completedAt] - The date and time when the machine state was completed. (optional)\n * @param {string} [tenantId] - The ID of the tenant associated with the machine state. (optional)\n */\n@Entity('MachineStateInfoEntity')\nexport class MachineStateInfoEntity extends BaseEntity {\n @PrimaryColumn({ name: 'instance_id', type: 'varchar', nullable: false })\n instanceId!: string\n\n @Column({ name: 'session_id', type: 'varchar', nullable: true })\n sessionId?: string\n\n // Xstate moved to name instead of instanceId for V5. Also makes more sense\n @Column({ name: 'machine_name', type: 'varchar', nullable: false })\n machineName!: string\n\n @Column({ name: 'latest_state_name', type: 'varchar', nullable: true })\n latestStateName?: string\n\n @Column({ name: 'latest_event_type', type: 'varchar', nullable: false })\n latestEventType!: string\n\n @Column({ name: 'state', type: 'text', nullable: false })\n state!: string\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'updated_at', nullable: false, type: typeOrmDateTime() })\n updatedAt!: Date\n\n @Column({ name: 'updated_count', type: 'integer', nullable: false })\n updatedCount!: number\n\n @Column({ name: 'expires_at', nullable: true, type: typeOrmDateTime() })\n expiresAt?: Date\n\n @Column({ name: 'completed_at', nullable: true, type: typeOrmDateTime() })\n completedAt?: Date\n\n @Column({ name: 'tenant_id', type: 'varchar', nullable: true })\n tenantId?: string\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { BaseEntity, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from 'typeorm'\n\n@Entity('Oid4vcStateEntity')\nexport class Oid4vcStateEntity<StateType> extends BaseEntity {\n @PrimaryColumn({ name: 'id', type: 'varchar', nullable: false })\n id!: string\n\n @Column({ name: 'lookup_ids', type: 'array', nullable: true })\n lookups?: Array<string>\n\n @Column({ name: 'state_id', type: 'varchar', nullable: true })\n stateId?: string\n\n @Column({ name: 'correlation_id', type: 'varchar', nullable: true })\n correlationId?: string\n\n @Column({ name: 'state', type: 'json', nullable: false })\n state!: StateType\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'updated_at', nullable: false, type: typeOrmDateTime() })\n updatedAt!: Date\n\n @Column({ name: 'expires_at', nullable: true, type: typeOrmDateTime() })\n expiresAt?: Date\n\n @Column({ name: 'tenant_id', type: 'varchar', nullable: true })\n tenantId?: string\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { IsNotEmpty } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, CreateDateColumn, Entity, Index, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'\n\n@Entity('DcqlQueryItem')\n@Index(['version'], { unique: false })\nexport class DcqlQueryItemEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column({ name: 'query_id', length: 255, type: 'varchar', nullable: false, unique: false })\n @IsNotEmpty({ message: 'A blank query id field is not allowed' })\n queryId!: string\n\n @Column({ name: 'version', length: 255, type: 'varchar', nullable: false, unique: false })\n @IsNotEmpty({ message: 'A blank version field is not allowed' })\n version!: string\n\n @Column({ name: 'tenant_id', length: 255, type: 'varchar', nullable: true, unique: false })\n tenantId?: string\n\n @Column({ name: 'purpose', length: 255, type: 'varchar', nullable: true, unique: false })\n purpose?: string\n\n @Column({ name: 'name', length: 255, type: 'varchar', nullable: true, unique: false })\n name?: string\n\n @Column({ name: 'query', type: 'text', nullable: false, unique: false })\n @IsNotEmpty({ message: 'A blank dcql query payload field is not allowed' })\n query!: 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","import { BitstringStatusMessage } from '../../types'\nimport { ChildEntity, Column } from 'typeorm'\nimport { StatusListEntryEntity } from './StatusList2021EntryEntity'\n\n@ChildEntity('bitstring')\nexport class BitstringStatusListEntryEntity extends StatusListEntryEntity {\n @Column({ type: 'varchar', name: 'statusPurpose', nullable: false })\n statusPurpose!: string\n\n @Column({ type: 'integer', name: 'bitsPerStatus', nullable: true, default: 1 })\n bitsPerStatus?: number\n\n @Column({\n type: 'text',\n name: 'statusMessage',\n nullable: true,\n transformer: {\n from(value: string): Array<BitstringStatusMessage> | undefined {\n if (!value) {\n return undefined\n }\n return JSON.parse(value)\n },\n to(value: Array<BitstringStatusMessage> | undefined): string | undefined {\n if (!value) {\n return undefined\n }\n return JSON.stringify(value)\n },\n },\n })\n statusMessage?: Array<BitstringStatusMessage>\n\n @Column({\n type: 'text',\n name: 'statusReference',\n nullable: true,\n transformer: {\n from(value: string): string | string[] | undefined {\n if (!value) {\n return undefined\n }\n if (value.startsWith('[')) {\n return JSON.parse(value)\n }\n return value\n },\n to(value: string | string[] | undefined): string | undefined {\n if (!value) {\n return undefined\n }\n if (Array.isArray(value)) {\n return JSON.stringify(value)\n }\n return value\n },\n },\n })\n statusReference?: string | string[]\n}\n","import { Validate } from 'class-validator'\nimport { BaseEntity, Column, Entity, JoinColumn, ManyToOne, PrimaryColumn, TableInheritance } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { StatusList2021Entity, StatusListEntity } from './StatusListEntities'\n\n@Entity('StatusListEntry')\n// @Unique('uq_credential_statuslist', ['statusList', 'credentialId']) // disabled because one prop can be null\n// @Unique('uq_credentialHash_statuslistId', ['statusList', 'credentialHash']) // disabled because one prop can be null\n@TableInheritance({ column: { type: 'varchar', name: 'type' } })\nexport class StatusListEntryEntity extends BaseEntity {\n @PrimaryColumn({ name: 'statusListId', type: 'varchar', nullable: false, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Status list id is required' })\n statusListId!: string\n\n @PrimaryColumn({ name: 'statusListIndex', type: 'integer', nullable: false, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Status list index is required' })\n statusListIndex!: number\n\n @ManyToOne(() => StatusList2021Entity, (statusList) => statusList.statusListEntries)\n @JoinColumn({ name: 'statusListId' })\n statusList!: StatusListEntity\n\n @Column({ name: 'credentialId', type: 'text', nullable: true })\n credentialId?: string\n\n @Column({ name: 'credentialHash', length: 128, type: 'varchar', nullable: true, unique: false })\n credentialHash?: string\n\n @Column({ name: 'correlationId', length: 255, type: 'varchar', nullable: true, unique: false })\n entryCorrelationId?: string\n\n @Column({ name: 'value', length: 50, type: 'varchar', nullable: true, unique: false })\n value?: string\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport {\n type CredentialProofFormat,\n type IIssuer,\n type StatusListCredential,\n StatusListCredentialIdMode,\n StatusListDriverType,\n type StatusListIndexingDirection,\n StatusListType,\n type StatusPurpose2021,\n} from '@sphereon/ssi-types'\n\nimport { BaseEntity, ChildEntity, Column, Entity, OneToMany, PrimaryColumn, TableInheritance, Unique } from 'typeorm'\nimport { BitstringStatusListEntryEntity } from './BitstringStatusListEntryEntity'\n\nimport { StatusListEntryEntity } from './StatusList2021EntryEntity'\n\n@Entity('StatusList')\n@Unique('UQ_correlationId', ['correlationId'])\n@TableInheritance({ column: { type: 'simple-enum', name: 'type', enum: StatusListType } })\nexport abstract class StatusListEntity extends BaseEntity {\n @PrimaryColumn({ name: 'id', type: 'varchar' })\n id!: string\n\n @Column({ name: 'correlationId', type: 'varchar', nullable: false })\n correlationId!: string\n\n @Column({ name: 'length', type: 'integer', nullable: false, unique: false })\n length!: number\n\n @Column('simple-enum', {\n name: 'type',\n enum: StatusListType,\n nullable: false,\n })\n type!: StatusListType\n\n @Column({\n name: 'issuer',\n type: 'text',\n nullable: false,\n unique: false,\n transformer: {\n from(value: string): string | IIssuer {\n if (value?.trim()?.startsWith('{')) {\n return JSON.parse(value)\n }\n return value\n },\n to(value: string | IIssuer): string {\n if (typeof value === 'string') {\n return value\n }\n return JSON.stringify(value)\n },\n },\n })\n issuer!: string | IIssuer\n\n @Column('simple-enum', {\n name: 'driverType',\n enum: StatusListDriverType,\n nullable: false,\n default: StatusListDriverType.AGENT_TYPEORM,\n })\n driverType!: StatusListDriverType\n\n @Column('simple-enum', {\n name: 'credentialIdMode',\n enum: StatusListCredentialIdMode,\n nullable: false,\n default: StatusListCredentialIdMode.ISSUANCE,\n })\n credentialIdMode!: StatusListCredentialIdMode\n\n @Column({ type: 'varchar', name: 'proofFormat', enum: ['lds', 'jwt'], nullable: false, default: 'lds' })\n proofFormat!: CredentialProofFormat\n\n @Column({\n name: 'statusListCredential',\n type: 'text',\n nullable: true,\n unique: false,\n transformer: {\n from(value: string): StatusListCredential {\n if (value?.startsWith('ey')) {\n return value\n }\n return JSON.parse(value)\n },\n to(value: StatusListCredential): string {\n if (typeof value === 'string') {\n return value\n }\n return JSON.stringify(value)\n },\n },\n })\n statusListCredential?: StatusListCredential\n}\n\n@ChildEntity(StatusListType.StatusList2021)\nexport class StatusList2021Entity extends StatusListEntity {\n @Column({\n type: 'varchar',\n name: 'indexingDirection',\n enum: ['rightToLeft'],\n nullable: false,\n default: 'rightToLeft',\n })\n indexingDirection!: StatusListIndexingDirection\n\n @Column({ type: 'varchar', name: 'statusPurpose', nullable: false, default: 'revocation' })\n statusPurpose!: StatusPurpose2021\n\n @OneToMany((type) => StatusListEntryEntity, (entry) => entry.statusList)\n statusListEntries!: StatusListEntryEntity[]\n}\n\n@ChildEntity(StatusListType.OAuthStatusList)\nexport class OAuthStatusListEntity extends StatusListEntity {\n @Column({ type: 'integer', name: 'bitsPerStatus', nullable: false })\n bitsPerStatus!: number\n @Column({ name: 'expiresAt', nullable: true, type: typeOrmDateTime() })\n expiresAt?: Date\n}\n\n@ChildEntity(StatusListType.BitstringStatusList)\nexport class BitstringStatusListEntity extends StatusListEntity {\n @Column({\n type: 'varchar',\n name: 'statusPurpose',\n nullable: false,\n transformer: {\n from(value: string): string | string[] {\n if (value?.includes(',')) {\n return value.split(',').map((v) => v.trim() as string)\n }\n return value as string\n },\n to(value: string | string[]): string {\n if (Array.isArray(value)) {\n return value.join(',')\n }\n return value\n },\n },\n })\n statusPurpose!: string | string[]\n\n @Column({ type: 'integer', name: 'bitsPerStatus', nullable: false })\n bitsPerStatus?: number\n\n @Column({ name: 'validFrom', nullable: true, type: typeOrmDateTime() })\n validFrom?: Date\n\n @Column({ name: 'validUntil', nullable: true, type: typeOrmDateTime() })\n validUntil?: Date\n\n @Column({ type: 'integer', name: 'ttl', nullable: true })\n ttl?: number\n\n @OneToMany((type) => BitstringStatusListEntryEntity, (entry) => entry.statusList)\n statusListEntries!: BitstringStatusListEntryEntity[]\n}\n","import {\n AbstractContactStore,\n AddElectronicAddressArgs,\n AddIdentityArgs,\n AddPartyArgs,\n AddPartyTypeArgs,\n AddPhysicalAddressArgs,\n AddRelationshipArgs,\n ConnectionType,\n CorrelationIdentifierType,\n ElectronicAddress,\n GetElectronicAddressArgs,\n GetElectronicAddressesArgs,\n GetIdentitiesArgs,\n GetIdentityArgs,\n GetPartiesArgs,\n GetPartyArgs,\n GetPartyTypeArgs,\n GetPartyTypesArgs,\n GetPhysicalAddressArgs,\n GetPhysicalAddressesArgs,\n GetRelationshipArgs,\n GetRelationshipsArgs,\n Identity,\n IMetadataEntity,\n MetadataItem,\n MetadataTypes,\n NonPersistedConnectionConfig,\n NonPersistedContact,\n Party,\n PartyRelationship,\n PartyType,\n PartyTypeType,\n PhysicalAddress,\n RemoveElectronicAddressArgs,\n RemoveIdentityArgs,\n RemovePartyArgs,\n RemovePartyTypeArgs,\n RemovePhysicalAddressArgs,\n RemoveRelationshipArgs,\n UpdateElectronicAddressArgs,\n UpdateIdentityArgs,\n UpdatePartyArgs,\n UpdatePartyTypeArgs,\n UpdatePhysicalAddressArgs,\n UpdateRelationshipArgs,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { BaseEntity, DataSource, type FindOptionsWhere, In, type Repository } from 'typeorm'\nimport { BaseConfigEntity } from '../entities/contact/BaseConfigEntity'\nimport { BaseContactEntity } from '../entities/contact/BaseContactEntity'\nimport { ConnectionEntity } from '../entities/contact/ConnectionEntity'\nimport { CorrelationIdentifierEntity } from '../entities/contact/CorrelationIdentifierEntity'\nimport { ElectronicAddressEntity } from '../entities/contact/ElectronicAddressEntity'\nimport { IdentityEntity } from '../entities/contact/IdentityEntity'\nimport { IdentityMetadataItemEntity } from '../entities/contact/IdentityMetadataItemEntity'\nimport { PartyEntity } from '../entities/contact/PartyEntity'\nimport { PartyRelationshipEntity } from '../entities/contact/PartyRelationshipEntity'\nimport { PartyTypeEntity } from '../entities/contact/PartyTypeEntity'\nimport { PhysicalAddressEntity } from '../entities/contact/PhysicalAddressEntity'\nimport {\n electronicAddressEntityFrom,\n electronicAddressFrom,\n identityEntityFrom,\n identityFrom,\n isDidAuthConfig,\n isNaturalPerson,\n isOpenIdConfig,\n isOrganization,\n partyEntityFrom,\n partyFrom,\n partyRelationshipEntityFrom,\n partyRelationshipFrom,\n partyTypeEntityFrom,\n partyTypeFrom,\n physicalAddressEntityFrom,\n physicalAddressFrom,\n} from '../utils/contact/MappingUtils'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:contact-store')\n\nexport class ContactStore extends AbstractContactStore {\n private readonly dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n getParty = async (args: GetPartyArgs): Promise<Party> => {\n const { partyId } = args\n const result: PartyEntity | null = await (await this.dbConnection).getRepository(PartyEntity).findOne({\n where: { id: partyId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party found for id: ${partyId}`))\n }\n\n return partyFrom(result)\n }\n\n getParties = async (args?: GetPartiesArgs): Promise<Array<Party>> => {\n debug('getParties()', args)\n const { filter } = args ?? {}\n const partyRepository = (await this.dbConnection).getRepository(PartyEntity)\n const filterConditions = this.buildFilters(filter)\n const initialResult = await partyRepository.find({ select: ['id'], where: filterConditions })\n\n // Fetch the complete entities based on the initial result IDs\n const result = await partyRepository.find({ where: { id: In(initialResult.map((party) => party.id)) } })\n debug(`getParties() resulted in ${result.length} parties`)\n return result.map(partyFrom)\n }\n\n addParty = async (args: AddPartyArgs): Promise<Party> => {\n const { identities, contact, partyType } = args\n\n const partyRepository: Repository<PartyEntity> = (await this.dbConnection).getRepository(PartyEntity)\n\n if (!this.hasCorrectPartyType(partyType.type, contact)) {\n return Promise.reject(Error(`Party type ${partyType.type}, does not match for provided contact`))\n }\n\n for (const identity of identities ?? []) {\n if (identity.identifier.type === CorrelationIdentifierType.URL) {\n if (!identity.connection) {\n return Promise.reject(Error(`Identity with correlation type ${CorrelationIdentifierType.URL} should contain a connection`))\n }\n\n if (!this.hasCorrectConnectionConfig(identity.connection.type, identity.connection.config)) {\n return Promise.reject(Error(`Connection type ${identity.connection.type}, does not match for provided config`))\n }\n }\n }\n\n const partyEntity: PartyEntity = partyEntityFrom(args)\n debug('Adding party', args)\n const createdResult: PartyEntity = await partyRepository.save(partyEntity)\n\n return partyFrom(createdResult)\n }\n\n updateParty = async (args: UpdatePartyArgs): Promise<Party> => {\n const { party } = args\n const partyRepository: Repository<PartyEntity> = (await this.dbConnection).getRepository(PartyEntity)\n const result: PartyEntity | null = await partyRepository.findOne({\n where: { id: party.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party found for id: ${party.id}`))\n }\n\n const updatedParty = {\n ...party,\n identities: result.identities,\n type: result.partyType,\n relationships: result.relationships,\n electronicAddresses: result.electronicAddresses,\n }\n\n debug('Updating party', party)\n const updatedResult: PartyEntity = await partyRepository.save(updatedParty, { transaction: true })\n\n return partyFrom(updatedResult)\n }\n\n removeParty = async (args: RemovePartyArgs): Promise<void> => {\n const { partyId } = args\n const partyRepository: Repository<PartyEntity> = (await this.dbConnection).getRepository(PartyEntity)\n debug('Removing party', partyId)\n partyRepository\n .findOneById(partyId)\n .then(async (party: PartyEntity | null): Promise<void> => {\n if (!party) {\n await Promise.reject(Error(`Unable to find the party with id to remove: ${partyId}`))\n } else {\n await this.deleteIdentities(party.identities)\n await this.deleteElectronicAddresses(party.electronicAddresses)\n await this.deletePhysicalAddresses(party.physicalAddresses)\n\n await partyRepository\n .delete({ id: partyId })\n .catch((error) => Promise.reject(Error(`Unable to remove party with id: ${partyId}. ${error}`)))\n\n const partyContactRepository: Repository<BaseContactEntity> = (await this.dbConnection).getRepository(BaseContactEntity)\n await partyContactRepository\n .delete({ id: party.contact.id })\n .catch((error) => Promise.reject(Error(`Unable to remove party contact with id: ${party.contact.id}. ${error}`)))\n }\n })\n .catch((error) => Promise.reject(Error(`Unable to remove party with id: ${partyId}. ${error}`)))\n }\n\n getIdentity = async (args: GetIdentityArgs): Promise<Identity> => {\n const { identityId } = args\n const result: IdentityEntity | null = await (await this.dbConnection).getRepository(IdentityEntity).findOne({\n where: { id: identityId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No identity found for id: ${identityId}`))\n }\n\n return identityFrom(result)\n }\n\n getIdentities = async (args?: GetIdentitiesArgs): Promise<Array<Identity>> => {\n const { filter } = args ?? {}\n const identityRepository = (await this.dbConnection).getRepository(IdentityEntity)\n const filterConditions = this.buildFilters(filter)\n const initialResult = await identityRepository.find({ select: ['id'], where: filterConditions })\n\n const result = await identityRepository.find({ where: { id: In(initialResult.map((identity) => identity.id)) } })\n return result.map(identityFrom)\n }\n\n addIdentity = async (args: AddIdentityArgs): Promise<Identity> => {\n const { identity, partyId } = args\n const party: PartyEntity | null = await (await this.dbConnection).getRepository(PartyEntity).findOne({\n where: { id: partyId },\n })\n\n if (!party) {\n return Promise.reject(Error(`No party found for id: ${partyId}`))\n }\n\n if (identity.identifier.type === CorrelationIdentifierType.URL) {\n if (!identity.connection) {\n return Promise.reject(Error(`Identity with correlation type ${CorrelationIdentifierType.URL} should contain a connection`))\n }\n\n if (!this.hasCorrectConnectionConfig(identity.connection.type, identity.connection.config)) {\n return Promise.reject(Error(`Connection type ${identity.connection.type}, does not match for provided config`))\n }\n }\n\n const identityEntity: IdentityEntity = identityEntityFrom(identity)\n identityEntity.party = party\n debug('Adding identity', identity)\n const result: IdentityEntity = await (await this.dbConnection).getRepository(IdentityEntity).save(identityEntity, {\n transaction: true,\n })\n\n return identityFrom(result)\n }\n\n updateIdentity = async (args: UpdateIdentityArgs): Promise<Identity> => {\n const { identity } = args\n const identityRepository: Repository<IdentityEntity> = (await this.dbConnection).getRepository(IdentityEntity)\n const result: IdentityEntity | null = await identityRepository.findOne({\n where: { id: identity.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No identity found for id: ${identity.id}`))\n }\n\n if (identity.identifier.type === CorrelationIdentifierType.URL) {\n if (!identity.connection) {\n return Promise.reject(Error(`Identity with correlation type ${CorrelationIdentifierType.URL} should contain a connection`))\n }\n\n if (!this.hasCorrectConnectionConfig(identity.connection.type, identity.connection.config)) {\n return Promise.reject(Error(`Connection type ${identity.connection.type}, does not match for provided config`))\n }\n }\n\n debug('Updating identity', identity)\n const updatedResult: IdentityEntity = await identityRepository.save(identity, { transaction: true })\n\n return identityFrom(updatedResult)\n }\n\n removeIdentity = async (args: RemoveIdentityArgs): Promise<void> => {\n const { identityId } = args\n const identity: IdentityEntity | null = await (await this.dbConnection).getRepository(IdentityEntity).findOne({\n where: { id: identityId },\n })\n\n if (!identity) {\n return Promise.reject(Error(`No identity found for id: ${identityId}`))\n }\n\n debug('Removing identity', identityId)\n\n await this.deleteIdentities([identity])\n }\n\n addRelationship = async (args: AddRelationshipArgs): Promise<PartyRelationship> => {\n const { leftId, rightId } = args\n return this.assertRelationshipSides(leftId, rightId).then(async (): Promise<PartyRelationship> => {\n const relationship: PartyRelationshipEntity = partyRelationshipEntityFrom({\n leftId,\n rightId,\n })\n debug('Adding party relationship', relationship)\n\n const createdResult: PartyRelationshipEntity = await (await this.dbConnection).getRepository(PartyRelationshipEntity).save(relationship)\n\n return partyRelationshipFrom(createdResult)\n })\n }\n\n getRelationship = async (args: GetRelationshipArgs): Promise<PartyRelationship> => {\n const { relationshipId } = args\n const result: PartyRelationshipEntity | null = await (await this.dbConnection).getRepository(PartyRelationshipEntity).findOne({\n where: { id: relationshipId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No relationship found for id: ${relationshipId}`))\n }\n\n return partyRelationshipFrom(result)\n }\n\n getRelationships = async (args?: GetRelationshipsArgs): Promise<Array<PartyRelationship>> => {\n const { filter } = args ?? {}\n const partyRelationshipRepository: Repository<PartyRelationshipEntity> = (await this.dbConnection).getRepository(PartyRelationshipEntity)\n const initialResult: Array<PartyRelationshipEntity> = await partyRelationshipRepository.find({\n ...(filter && { where: filter }),\n })\n\n const result: Array<PartyRelationshipEntity> = await partyRelationshipRepository.find({\n where: {\n id: In(initialResult.map((partyRelationship: PartyRelationshipEntity) => partyRelationship.id)),\n },\n })\n\n return result.map((partyRelationship: PartyRelationshipEntity) => partyRelationshipFrom(partyRelationship))\n }\n\n updateRelationship = async (args: UpdateRelationshipArgs): Promise<PartyRelationship> => {\n const { relationship } = args\n const partyRelationshipRepository: Repository<PartyRelationshipEntity> = (await this.dbConnection).getRepository(PartyRelationshipEntity)\n const result: PartyRelationshipEntity | null = await partyRelationshipRepository.findOne({\n where: { id: relationship.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party relationship found for id: ${relationship.id}`))\n }\n\n return this.assertRelationshipSides(relationship.leftId, relationship.rightId).then(async (): Promise<PartyRelationship> => {\n debug('Updating party relationship', relationship)\n const updatedResult: PartyRelationshipEntity = await partyRelationshipRepository.save(relationship, { transaction: true })\n\n return partyRelationshipFrom(updatedResult)\n })\n }\n\n removeRelationship = async (args: RemoveRelationshipArgs): Promise<void> => {\n const { relationshipId } = args\n const partyRelationshipRepository: Repository<PartyRelationshipEntity> = (await this.dbConnection).getRepository(PartyRelationshipEntity)\n const relationship: PartyRelationshipEntity | null = await partyRelationshipRepository.findOne({\n where: { id: relationshipId },\n })\n\n if (!relationship) {\n return Promise.reject(Error(`No relationship found for id: ${relationshipId}`))\n }\n\n debug('Removing relationship', relationshipId)\n\n await partyRelationshipRepository.delete(relationshipId)\n }\n\n addPartyType = async (args: AddPartyTypeArgs): Promise<PartyType> => {\n const partyEntity: PartyTypeEntity = partyTypeEntityFrom(args)\n debug('Adding party type', args)\n const createdResult: PartyTypeEntity = await (await this.dbConnection).getRepository(PartyTypeEntity).save(partyEntity)\n\n return partyTypeFrom(createdResult)\n }\n\n getPartyType = async (args: GetPartyTypeArgs): Promise<PartyType> => {\n const { partyTypeId } = args\n const result: PartyTypeEntity | null = await (await this.dbConnection).getRepository(PartyTypeEntity).findOne({\n where: { id: partyTypeId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party type found for id: ${partyTypeId}`))\n }\n\n return partyTypeFrom(result)\n }\n\n getPartyTypes = async (args?: GetPartyTypesArgs): Promise<Array<PartyType>> => {\n const { filter } = args ?? {}\n const partyTypeRepository: Repository<PartyTypeEntity> = (await this.dbConnection).getRepository(PartyTypeEntity)\n const initialResult: Array<PartyTypeEntity> = await partyTypeRepository.find({\n ...(filter && { where: filter }),\n })\n\n const result: Array<PartyTypeEntity> = await partyTypeRepository.find({\n where: {\n id: In(initialResult.map((partyType: PartyTypeEntity) => partyType.id)),\n },\n })\n\n return result.map((partyType: PartyTypeEntity) => partyTypeFrom(partyType))\n }\n\n updatePartyType = async (args: UpdatePartyTypeArgs): Promise<PartyType> => {\n const { partyType } = args\n const partyTypeRepository: Repository<PartyTypeEntity> = (await this.dbConnection).getRepository(PartyTypeEntity)\n const result: PartyTypeEntity | null = await partyTypeRepository.findOne({\n where: { id: partyType.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party type found for id: ${partyType.id}`))\n }\n\n debug('Updating party type', partyType)\n const updatedResult: PartyTypeEntity = await partyTypeRepository.save(partyType, { transaction: true })\n\n return partyTypeFrom(updatedResult)\n }\n\n removePartyType = async (args: RemovePartyTypeArgs): Promise<void> => {\n const { partyTypeId } = args\n const parties: Array<PartyEntity> = await (await this.dbConnection).getRepository(PartyEntity).find({\n where: {\n partyType: {\n id: partyTypeId,\n },\n },\n })\n\n if (parties.length > 0) {\n return Promise.reject(Error(`Unable to remove party type with id: ${partyTypeId}. Party type is in use`))\n }\n\n const partyTypeRepository: Repository<PartyTypeEntity> = (await this.dbConnection).getRepository(PartyTypeEntity)\n const partyType: PartyTypeEntity | null = await partyTypeRepository.findOne({\n where: { id: partyTypeId },\n })\n\n if (!partyType) {\n return Promise.reject(Error(`No party type found for id: ${partyTypeId}`))\n }\n\n debug('Removing party type', partyTypeId)\n\n await partyTypeRepository.delete(partyTypeId)\n }\n\n getElectronicAddress = async (args: GetElectronicAddressArgs): Promise<ElectronicAddress> => {\n const { electronicAddressId } = args\n const result: ElectronicAddressEntity | null = await (await this.dbConnection).getRepository(ElectronicAddressEntity).findOne({\n where: { id: electronicAddressId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No electronic address found for id: ${electronicAddressId}`))\n }\n\n return electronicAddressFrom(result)\n }\n\n getElectronicAddresses = async (args?: GetElectronicAddressesArgs): Promise<Array<ElectronicAddress>> => {\n const { filter } = args ?? {}\n const electronicAddressRepository: Repository<ElectronicAddressEntity> = (await this.dbConnection).getRepository(ElectronicAddressEntity)\n const initialResult: Array<ElectronicAddressEntity> = await electronicAddressRepository.find({\n ...(filter && { where: filter }),\n })\n\n const result: Array<ElectronicAddressEntity> = await electronicAddressRepository.find({\n where: {\n id: In(initialResult.map((electronicAddress: ElectronicAddressEntity) => electronicAddress.id)),\n },\n })\n\n return result.map((electronicAddress: ElectronicAddressEntity) => electronicAddressFrom(electronicAddress))\n }\n\n addElectronicAddress = async (args: AddElectronicAddressArgs): Promise<ElectronicAddress> => {\n const { electronicAddress, partyId } = args\n const party: PartyEntity | null = await (await this.dbConnection).getRepository(PartyEntity).findOne({\n where: { id: partyId },\n })\n\n if (!party) {\n return Promise.reject(Error(`No party found for id: ${partyId}`))\n }\n\n const electronicAddressEntity: ElectronicAddressEntity = electronicAddressEntityFrom(electronicAddress)\n electronicAddressEntity.party = party\n debug('Adding electronic address', electronicAddress)\n const result: ElectronicAddressEntity = await (await this.dbConnection).getRepository(ElectronicAddressEntity).save(electronicAddressEntity, {\n transaction: true,\n })\n\n return electronicAddressFrom(result)\n }\n\n updateElectronicAddress = async (args: UpdateElectronicAddressArgs): Promise<ElectronicAddress> => {\n const { electronicAddress } = args\n const electronicAddressRepository: Repository<ElectronicAddressEntity> = (await this.dbConnection).getRepository(ElectronicAddressEntity)\n const result: ElectronicAddressEntity | null = await electronicAddressRepository.findOne({\n where: { id: electronicAddress.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No electronic address found for id: ${electronicAddress.id}`))\n }\n\n debug('Updating electronic address', electronicAddress)\n const updatedResult: ElectronicAddressEntity = await electronicAddressRepository.save(electronicAddress, { transaction: true })\n\n return electronicAddressFrom(updatedResult)\n }\n\n removeElectronicAddress = async (args: RemoveElectronicAddressArgs): Promise<void> => {\n const { electronicAddressId } = args\n const electronicAddressRepository: Repository<ElectronicAddressEntity> = (await this.dbConnection).getRepository(ElectronicAddressEntity)\n const electronicAddress: ElectronicAddressEntity | null = await electronicAddressRepository.findOne({\n where: { id: electronicAddressId },\n })\n\n if (!electronicAddress) {\n return Promise.reject(Error(`No electronic address found for id: ${electronicAddressId}`))\n }\n\n debug('Removing electronic address', electronicAddressId)\n\n await electronicAddressRepository.delete(electronicAddressId)\n }\n\n getPhysicalAddress = async (args: GetPhysicalAddressArgs): Promise<PhysicalAddress> => {\n const { physicalAddressId } = args\n const result: PhysicalAddressEntity | null = await (await this.dbConnection).getRepository(PhysicalAddressEntity).findOne({\n where: { id: physicalAddressId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No physical address found for id: ${physicalAddressId}`))\n }\n\n return physicalAddressFrom(result)\n }\n\n getPhysicalAddresses = async (args?: GetPhysicalAddressesArgs): Promise<Array<PhysicalAddress>> => {\n const { filter } = args ?? {}\n const physicalAddressRepository: Repository<PhysicalAddressEntity> = (await this.dbConnection).getRepository(PhysicalAddressEntity)\n const initialResult: Array<PhysicalAddressEntity> = await physicalAddressRepository.find({\n ...(filter && { where: filter }),\n })\n\n const result: Array<PhysicalAddressEntity> = await physicalAddressRepository.find({\n where: {\n id: In(initialResult.map((physicalAddress: PhysicalAddressEntity) => physicalAddress.id)),\n },\n })\n\n return result.map((physicalAddress: PhysicalAddressEntity) => physicalAddressFrom(physicalAddress))\n }\n\n addPhysicalAddress = async (args: AddPhysicalAddressArgs): Promise<PhysicalAddress> => {\n const { physicalAddress, partyId } = args\n const party: PartyEntity | null = await (await this.dbConnection).getRepository(PartyEntity).findOne({\n where: { id: partyId },\n })\n\n if (!party) {\n return Promise.reject(Error(`No party found for id: ${partyId}`))\n }\n\n const physicalAddressEntity: PhysicalAddressEntity = physicalAddressEntityFrom(physicalAddress)\n physicalAddressEntity.party = party\n debug('Adding physical address', physicalAddress)\n const result: PhysicalAddressEntity = await (await this.dbConnection).getRepository(PhysicalAddressEntity).save(physicalAddressEntity, {\n transaction: true,\n })\n\n return physicalAddressFrom(result)\n }\n\n updatePhysicalAddress = async (args: UpdatePhysicalAddressArgs): Promise<PhysicalAddress> => {\n const { physicalAddress } = args\n const physicalAddressRepository: Repository<PhysicalAddressEntity> = (await this.dbConnection).getRepository(PhysicalAddressEntity)\n const result: PhysicalAddressEntity | null = await physicalAddressRepository.findOne({\n where: { id: physicalAddress.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No physical address found for id: ${physicalAddress.id}`))\n }\n\n debug('Updating physical address', physicalAddress)\n const updatedResult: PhysicalAddressEntity = await physicalAddressRepository.save(physicalAddress, { transaction: true })\n\n return physicalAddressFrom(updatedResult)\n }\n\n removePhysicalAddress = async (args: RemovePhysicalAddressArgs): Promise<void> => {\n const { physicalAddressId } = args\n const physicalAddressRepository: Repository<PhysicalAddressEntity> = (await this.dbConnection).getRepository(PhysicalAddressEntity)\n const physicalAddress: PhysicalAddressEntity | null = await physicalAddressRepository.findOne({\n where: { id: physicalAddressId },\n })\n\n if (!physicalAddress) {\n return Promise.reject(Error(`No physical address found for id: ${physicalAddressId}`))\n }\n\n debug('Removing physical address', physicalAddressId)\n\n await physicalAddressRepository.delete(physicalAddressId)\n }\n\n private hasCorrectConnectionConfig = (type: ConnectionType, config: NonPersistedConnectionConfig): boolean => {\n switch (type) {\n case ConnectionType.OPENID_CONNECT:\n return isOpenIdConfig(config)\n case ConnectionType.SIOPv2:\n return isDidAuthConfig(config)\n default:\n throw new Error('Connection type not supported')\n }\n }\n\n private hasCorrectPartyType = (type: PartyTypeType, contact: NonPersistedContact): boolean => {\n switch (type) {\n case PartyTypeType.NATURAL_PERSON:\n return isNaturalPerson(contact)\n case PartyTypeType.ORGANIZATION:\n return isOrganization(contact)\n default:\n throw new Error('Party type not supported')\n }\n }\n\n private deleteIdentities = async (identities: Array<IdentityEntity>): Promise<void> => {\n debug('Removing identities', identities)\n\n const connection: DataSource = await this.dbConnection\n const correlationIdentifierRepository: Repository<CorrelationIdentifierEntity> = connection.getRepository(CorrelationIdentifierEntity)\n const baseConfigRepository: Repository<BaseConfigEntity> = connection.getRepository(BaseConfigEntity)\n const connectionRepository: Repository<ConnectionEntity> = connection.getRepository(ConnectionEntity)\n const identityMetadataItemRepository: Repository<IdentityMetadataItemEntity> = connection.getRepository(IdentityMetadataItemEntity)\n const identityRepository: Repository<IdentityEntity> = connection.getRepository(IdentityEntity)\n\n identities.map(async (identity: IdentityEntity): Promise<void> => {\n await correlationIdentifierRepository\n .delete(identity.identifier.id)\n .catch((error) => Promise.reject(Error(`Unable to remove identity.identifier with id ${identity.identifier.id}. ${error}`)))\n\n if (identity.connection) {\n await baseConfigRepository.delete(identity.connection.config.id)\n await connectionRepository\n .delete(identity.connection.id)\n .catch((error) => Promise.reject(Error(`Unable to remove identity.connection with id ${identity.connection?.id}. ${error}`)))\n }\n\n if (identity.metadata) {\n identity.metadata.map(async (metadataItem: IdentityMetadataItemEntity): Promise<void> => {\n await identityMetadataItemRepository\n .delete(metadataItem.id)\n .catch((error) => Promise.reject(Error(`Unable to remove identity.metadataItem with id ${metadataItem.id}. ${error}`)))\n })\n }\n\n await identityRepository\n .delete(identity.id)\n .catch((error) => Promise.reject(Error(`Unable to remove identity with id ${identity.id}. ${error}`)))\n })\n }\n\n private deleteElectronicAddresses = async (electronicAddresses: Array<ElectronicAddressEntity>): Promise<void> => {\n debug('Removing electronic addresses', electronicAddresses)\n\n const electronicAddressRepository: Repository<ElectronicAddressEntity> = (await this.dbConnection).getRepository(ElectronicAddressEntity)\n electronicAddresses.map(async (electronicAddress: ElectronicAddressEntity): Promise<void> => {\n await electronicAddressRepository\n .delete(electronicAddress.id)\n .catch((error) => Promise.reject(Error(`Unable to remove electronic address with id ${electronicAddress.id}. ${error}`)))\n })\n }\n\n private deletePhysicalAddresses = async (physicalAddresses: Array<PhysicalAddressEntity>): Promise<void> => {\n debug('Removing physical addresses', physicalAddresses)\n\n const physicalAddressRepository: Repository<PhysicalAddressEntity> = (await this.dbConnection).getRepository(PhysicalAddressEntity)\n physicalAddresses.map(async (physicalAddress: PhysicalAddressEntity): Promise<void> => {\n await physicalAddressRepository\n .delete(physicalAddress.id)\n .catch((error) => Promise.reject(Error(`Unable to remove physical address with id ${physicalAddress.id}. ${error}`)))\n })\n }\n\n private assertRelationshipSides = async (leftId: string, rightId: string): Promise<void> => {\n const partyRepository: Repository<PartyEntity> = (await this.dbConnection).getRepository(PartyEntity)\n const leftParty: PartyEntity | null = await partyRepository.findOne({\n where: { id: leftId },\n })\n\n if (!leftParty) {\n return Promise.reject(Error(`No party found for left side of the relationship, party id: ${leftId}`))\n }\n\n const rightParty: PartyEntity | null = await partyRepository.findOne({\n where: { id: rightId },\n })\n\n if (!rightParty) {\n return Promise.reject(Error(`No party found for right side of the relationship, party id: ${rightId}`))\n }\n }\n\n private buildFilters = <T extends BaseEntity>(filter?: Array<Record<string, any>>): Array<FindOptionsWhere<T>> | FindOptionsWhere<T> => {\n if (!filter) return {}\n\n return filter.map((condition) => this.processCondition(condition))\n }\n\n private processCondition = (condition: Record<string, any>): Record<string, any> => {\n const conditionObject: Record<string, any> = {}\n\n Object.keys(condition).forEach((key) => {\n const value = condition[key]\n\n if (key === 'metadata' && value) {\n conditionObject[key] = this.buildMetadataCondition(value)\n } else if (typeof value === 'object' && value !== null) {\n conditionObject[key] = this.processCondition(value)\n } else {\n conditionObject[key] = value\n }\n })\n\n return conditionObject\n }\n\n private buildMetadataCondition = <T extends MetadataItem<MetadataTypes>>(metadata: Partial<T>): FindOptionsWhere<IMetadataEntity> => {\n const metadataCondition: FindOptionsWhere<any> = {\n label: metadata.label,\n }\n\n switch (typeof metadata.value) {\n case 'string':\n metadataCondition.stringValue = metadata.value as string\n break\n case 'number':\n metadataCondition.numberValue = metadata.value as number\n break\n case 'boolean':\n metadataCondition.boolValue = metadata.value as boolean\n break\n case 'object':\n if (metadata.value instanceof Date) {\n metadataCondition.dateValue = metadata.value as Date\n } else {\n // For now, we only support / implement not-primitive type Date in the entity\n throw new Error(`Unsupported object type: ${Object.prototype.toString.call(metadata.value).slice(8, -1)} for value ${metadata.value}`) // slice to extract type from string [object String]\n }\n break\n default:\n throw new Error(`Unsupported value type: ${typeof metadata.value}`)\n }\n return metadataCondition\n }\n}\n","export const replaceNullWithUndefined = (obj: any): any => {\n if (obj === null) {\n return undefined\n }\n\n if (typeof obj !== 'object' || obj instanceof Date) {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj.map((value: any) => replaceNullWithUndefined(value))\n }\n\n const result: any = {}\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n result[key] = replaceNullWithUndefined(obj[key])\n }\n }\n return result\n}\n","import type {\n Connection,\n ConnectionConfig,\n Contact,\n CorrelationIdentifier,\n DidAuthConfig,\n ElectronicAddress,\n Identity,\n MetadataItem,\n MetadataTypes,\n NaturalPerson,\n NonPersistedConnection,\n NonPersistedConnectionConfig,\n NonPersistedContact,\n NonPersistedCorrelationIdentifier,\n NonPersistedDidAuthConfig,\n NonPersistedElectronicAddress,\n NonPersistedIdentity,\n NonPersistedMetadataItem,\n NonPersistedNaturalPerson,\n NonPersistedOpenIdConfig,\n NonPersistedOrganization,\n NonPersistedParty,\n NonPersistedPartyRelationship,\n NonPersistedPartyType,\n NonPersistedPhysicalAddress,\n OpenIdConfig,\n Organization,\n Party,\n PartyRelationship,\n PartyType,\n PhysicalAddress,\n} from '@sphereon/ssi-sdk.data-store-types'\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'\nimport { PartyRelationshipEntity } from '../../entities/contact/PartyRelationshipEntity'\nimport { PartyTypeEntity } from '../../entities/contact/PartyTypeEntity'\nimport { PhysicalAddressEntity } from '../../entities/contact/PhysicalAddressEntity'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const partyEntityFrom = (party: NonPersistedParty): PartyEntity => {\n const partyEntity: PartyEntity = new PartyEntity()\n partyEntity.uri = party.uri\n partyEntity.identities = party.identities ? party.identities.map((identity: NonPersistedIdentity) => identityEntityFrom(identity)) : []\n partyEntity.electronicAddresses = party.electronicAddresses\n ? party.electronicAddresses.map((electronicAddress: NonPersistedElectronicAddress) => electronicAddressEntityFrom(electronicAddress))\n : []\n partyEntity.physicalAddresses = party.physicalAddresses\n ? party.physicalAddresses.map((physicalAddress: NonPersistedPhysicalAddress) => physicalAddressEntityFrom(physicalAddress))\n : []\n partyEntity.partyType = partyTypeEntityFrom(party.partyType)\n partyEntity.contact = contactEntityFrom(party.contact)\n partyEntity.ownerId = party.ownerId\n partyEntity.tenantId = party.tenantId\n\n return partyEntity\n}\n\nexport const partyFrom = (party: PartyEntity): Party => {\n const result: Party = {\n id: party.id,\n uri: party.uri,\n roles: [...new Set(party.identities?.flatMap((identity: IdentityEntity) => identity.roles))],\n identities: party.identities ? party.identities.map((identity: IdentityEntity) => identityFrom(identity)) : [],\n electronicAddresses: party.electronicAddresses\n ? party.electronicAddresses.map((electronicAddress: ElectronicAddressEntity) => electronicAddressFrom(electronicAddress))\n : [],\n physicalAddresses: party.physicalAddresses\n ? party.physicalAddresses.map((physicalAddress: PhysicalAddressEntity) => physicalAddressFrom(physicalAddress))\n : [],\n relationships: party.relationships ? party.relationships.map((relationship: PartyRelationshipEntity) => partyRelationshipFrom(relationship)) : [],\n partyType: partyTypeFrom(party.partyType),\n contact: contactFrom(party.contact),\n ownerId: party.ownerId,\n tenantId: party.tenantId,\n createdAt: party.createdAt,\n lastUpdatedAt: party.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const contactEntityFrom = (contact: NonPersistedContact): BaseContactEntity => {\n if (isNaturalPerson(contact)) {\n return naturalPersonEntityFrom(<NonPersistedNaturalPerson>contact)\n } else if (isOrganization(contact)) {\n return organizationEntityFrom(<NonPersistedOrganization>contact)\n }\n\n throw new Error('Contact not supported')\n}\n\nexport const contactFrom = (contact: BaseContactEntity): Contact => {\n if (isNaturalPerson(contact)) {\n return naturalPersonFrom(<NaturalPersonEntity>contact)\n } else if (isOrganization(contact)) {\n return organizationFrom(<OrganizationEntity>contact)\n }\n\n throw new Error(`Contact type not supported`)\n}\n\nexport const isNaturalPerson = (contact: NonPersistedContact | BaseContactEntity): contact is NonPersistedNaturalPerson | NaturalPersonEntity =>\n 'firstName' in contact && 'lastName' in contact\n\nexport const isOrganization = (contact: NonPersistedContact | BaseContactEntity): contact is NonPersistedOrganization | OrganizationEntity =>\n 'legalName' in contact\n\nexport const connectionEntityFrom = (connection: NonPersistedConnection): ConnectionEntity => {\n const connectionEntity: ConnectionEntity = new ConnectionEntity()\n connectionEntity.type = connection.type\n connectionEntity.config = configEntityFrom(connection.config)\n connectionEntity.ownerId = connection.ownerId\n connectionEntity.tenantId = connection.tenantId\n\n return connectionEntity\n}\n\nexport const connectionFrom = (connection: ConnectionEntity): Connection => {\n const result: Connection = {\n id: connection.id,\n type: connection.type,\n ownerId: connection.ownerId,\n tenantId: connection.tenantId,\n config: configFrom(connection.config),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nconst configEntityFrom = (config: NonPersistedConnectionConfig): BaseConfigEntity => {\n if (isOpenIdConfig(config)) {\n return openIdConfigEntityFrom(<NonPersistedOpenIdConfig>config)\n } else if (isDidAuthConfig(config)) {\n return didAuthConfigEntityFrom(<NonPersistedDidAuthConfig>config)\n }\n\n throw new Error('config type not supported')\n}\n\nexport const correlationIdentifierEntityFrom = (identifier: NonPersistedCorrelationIdentifier): CorrelationIdentifierEntity => {\n const identifierEntity: CorrelationIdentifierEntity = new CorrelationIdentifierEntity()\n identifierEntity.type = identifier.type\n identifierEntity.correlationId = identifier.correlationId\n identifierEntity.ownerId = identifier.ownerId\n identifierEntity.tenantId = identifier.tenantId\n\n return identifierEntity\n}\n\nexport const correlationIdentifierFrom = (identifier: CorrelationIdentifierEntity): CorrelationIdentifier => {\n const result: CorrelationIdentifier = {\n id: identifier.id,\n type: identifier.type,\n correlationId: identifier.correlationId,\n ownerId: identifier.ownerId,\n tenantId: identifier.tenantId,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const didAuthConfigEntityFrom = (config: NonPersistedDidAuthConfig): DidAuthConfigEntity => {\n let identifier: string | undefined = undefined\n if (typeof config.idOpts.identifier === 'string') {\n identifier = config.idOpts.identifier\n } else if (typeof config.idOpts.identifier === 'object') {\n if ('did' in config.idOpts.identifier && typeof config.idOpts.identifier.did === 'string') {\n identifier = config.idOpts.identifier.did\n }\n }\n if (!identifier) {\n throw Error(`Identifier method ${config.idOpts.method} not yet supported`)\n }\n const didAuthConfig: DidAuthConfigEntity = new DidAuthConfigEntity()\n didAuthConfig.identifier = identifier\n didAuthConfig.redirectUrl = config.redirectUrl\n didAuthConfig.sessionId = config.sessionId\n didAuthConfig.ownerId = config.ownerId\n didAuthConfig.tenantId = config.tenantId\n return didAuthConfig\n}\n\nexport const electronicAddressEntityFrom = (electronicAddress: NonPersistedElectronicAddress): ElectronicAddressEntity => {\n const electronicAddressEntity: ElectronicAddressEntity = new ElectronicAddressEntity()\n electronicAddressEntity.type = electronicAddress.type\n electronicAddressEntity.electronicAddress = electronicAddress.electronicAddress\n electronicAddressEntity.ownerId = electronicAddress.ownerId\n electronicAddressEntity.tenantId = electronicAddress.tenantId\n\n return electronicAddressEntity\n}\n\nexport const electronicAddressFrom = (electronicAddress: ElectronicAddressEntity): ElectronicAddress => {\n const result: ElectronicAddress = {\n id: electronicAddress.id,\n type: electronicAddress.type,\n electronicAddress: electronicAddress.electronicAddress,\n ownerId: electronicAddress.ownerId,\n tenantId: electronicAddress.tenantId,\n createdAt: electronicAddress.createdAt,\n lastUpdatedAt: electronicAddress.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const physicalAddressEntityFrom = (physicalAddress: NonPersistedPhysicalAddress): PhysicalAddressEntity => {\n const physicalAddressEntity: PhysicalAddressEntity = new PhysicalAddressEntity()\n physicalAddressEntity.type = physicalAddress.type\n physicalAddressEntity.streetName = physicalAddress.streetName\n physicalAddressEntity.streetNumber = physicalAddress.streetNumber\n physicalAddressEntity.postalCode = physicalAddress.postalCode\n physicalAddressEntity.cityName = physicalAddress.cityName\n physicalAddressEntity.provinceName = physicalAddress.provinceName\n physicalAddressEntity.countryCode = physicalAddress.countryCode\n physicalAddressEntity.buildingName = physicalAddress.buildingName\n physicalAddressEntity.ownerId = physicalAddress.ownerId\n physicalAddressEntity.tenantId = physicalAddress.tenantId\n\n return physicalAddressEntity\n}\n\nexport const physicalAddressFrom = (physicalAddress: PhysicalAddressEntity): PhysicalAddress => {\n const result: PhysicalAddress = {\n id: physicalAddress.id,\n type: physicalAddress.type,\n streetName: physicalAddress.streetName,\n streetNumber: physicalAddress.streetNumber,\n postalCode: physicalAddress.postalCode,\n cityName: physicalAddress.cityName,\n provinceName: physicalAddress.provinceName,\n countryCode: physicalAddress.countryCode,\n buildingName: physicalAddress.buildingName,\n ownerId: physicalAddress.ownerId,\n tenantId: physicalAddress.tenantId,\n createdAt: physicalAddress.createdAt,\n lastUpdatedAt: physicalAddress.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const identityEntityFrom = (entity: NonPersistedIdentity): IdentityEntity => {\n const identityEntity: IdentityEntity = new IdentityEntity()\n identityEntity.alias = entity.alias\n identityEntity.origin = entity.origin\n identityEntity.ownerId = entity.ownerId\n identityEntity.tenantId = entity.tenantId\n identityEntity.roles = entity.roles\n identityEntity.identifier = correlationIdentifierEntityFrom(entity.identifier)\n identityEntity.connection = entity.connection ? connectionEntityFrom(entity.connection) : undefined\n identityEntity.metadata = entity.metadata\n ? entity.metadata.map(identityMetadataItemEntityFrom).filter((entity): entity is IdentityMetadataItemEntity => entity !== undefined)\n : []\n return identityEntity\n}\n\nexport const identityFrom = (identity: IdentityEntity): Identity => {\n const result: Identity = {\n id: identity.id,\n alias: identity.alias,\n origin: identity.origin,\n roles: identity.roles,\n tenantId: identity.tenantId,\n ownerId: identity.ownerId,\n identifier: correlationIdentifierFrom(identity.identifier),\n ...(identity.connection && { connection: connectionFrom(identity.connection) }),\n metadata: identity.metadata ? identity.metadata.map((item: IdentityMetadataItemEntity) => metadataItemFrom(item)) : [],\n createdAt: identity.createdAt,\n lastUpdatedAt: identity.createdAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nconst metadataItemEntityFrom = <T extends MetadataTypes, U extends { new (): any }>(\n item: NonPersistedMetadataItem<T>,\n EntityClass: U,\n): InstanceType<U> | undefined => {\n const { label, value } = item\n\n if (value === null || value === undefined) {\n return undefined\n }\n\n const metadataItemEntity = new EntityClass()\n metadataItemEntity.label = label\n metadataItemEntity.valueType = typeof value\n\n switch (typeof value) {\n case 'undefined':\n return undefined\n case 'string':\n metadataItemEntity.stringValue = value\n break\n case 'number':\n metadataItemEntity.numberValue = value\n break\n case 'boolean':\n metadataItemEntity.boolValue = value\n break\n case 'object':\n metadataItemEntity.valueType = Object.prototype.toString.call(value).slice(8, -1)\n if (value instanceof Date) {\n metadataItemEntity.dateValue = value\n } else {\n // For now, we only support / implement not-primitive type Date in the entity\n throw new Error(`Unsupported object type: ${metadataItemEntity.valueType} for value ${value}`)\n }\n break\n }\n return metadataItemEntity\n}\n\nexport const identityMetadataItemEntityFrom = (item: NonPersistedMetadataItem<MetadataTypes>): IdentityMetadataItemEntity | undefined => {\n return metadataItemEntityFrom(item, IdentityMetadataItemEntity)\n}\n\nexport const contactMetadataItemEntityFrom = (item: NonPersistedMetadataItem<MetadataTypes>): ContactMetadataItemEntity | undefined => {\n return metadataItemEntityFrom(item, ContactMetadataItemEntity)\n}\n\nexport const metadataItemFrom = (entity: IdentityMetadataItemEntity | ContactMetadataItemEntity): MetadataItem<MetadataTypes> => {\n const item: Partial<MetadataItem<MetadataTypes>> = {\n id: entity.id,\n label: entity.label,\n }\n switch (entity.valueType) {\n case 'string':\n item.value = entity.stringValue\n break\n case 'number':\n item.value = entity.numberValue\n break\n case 'Date':\n item.value = entity.dateValue\n break\n case 'boolean':\n item.value = entity.boolValue\n break\n default:\n throw new Error(`Unsupported valueType ${entity.valueType}`)\n }\n return item as MetadataItem<MetadataTypes>\n}\n\nexport const naturalPersonEntityFrom = (naturalPerson: NonPersistedNaturalPerson): NaturalPersonEntity => {\n const naturalPersonEntity: NaturalPersonEntity = new NaturalPersonEntity()\n naturalPersonEntity.firstName = naturalPerson.firstName\n naturalPersonEntity.middleName = naturalPerson.middleName\n naturalPersonEntity.lastName = naturalPerson.lastName\n naturalPersonEntity.displayName = naturalPerson.displayName\n naturalPersonEntity.ownerId = naturalPerson.ownerId\n naturalPersonEntity.tenantId = naturalPerson.tenantId\n naturalPersonEntity.metadata = naturalPerson.metadata\n ? naturalPerson.metadata.map(contactMetadataItemEntityFrom).filter((entity): entity is ContactMetadataItemEntity => entity !== undefined)\n : []\n\n return naturalPersonEntity\n}\n\nexport const naturalPersonFrom = (naturalPerson: NaturalPersonEntity): NaturalPerson => {\n const result: NaturalPerson = {\n id: naturalPerson.id,\n firstName: naturalPerson.firstName,\n middleName: naturalPerson.middleName,\n lastName: naturalPerson.lastName,\n displayName: naturalPerson.displayName,\n metadata: naturalPerson.metadata ? naturalPerson.metadata.map((item: ContactMetadataItemEntity) => metadataItemFrom(item)) : [],\n ownerId: naturalPerson.ownerId,\n tenantId: naturalPerson.tenantId,\n createdAt: naturalPerson.createdAt,\n lastUpdatedAt: naturalPerson.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const openIdConfigEntityFrom = (config: NonPersistedOpenIdConfig): OpenIdConfigEntity => {\n const openIdConfig: OpenIdConfigEntity = new OpenIdConfigEntity()\n openIdConfig.clientId = config.clientId\n openIdConfig.clientSecret = config.clientSecret\n openIdConfig.scopes = config.scopes\n openIdConfig.issuer = config.issuer\n openIdConfig.redirectUrl = config.redirectUrl\n openIdConfig.dangerouslyAllowInsecureHttpRequests = config.dangerouslyAllowInsecureHttpRequests\n openIdConfig.clientAuthMethod = config.clientAuthMethod\n openIdConfig.ownerId = config.ownerId\n openIdConfig.tenantId = config.tenantId\n\n return openIdConfig\n}\n\nexport const organizationEntityFrom = (organization: NonPersistedOrganization): OrganizationEntity => {\n const organizationEntity: OrganizationEntity = new OrganizationEntity()\n organizationEntity.legalName = organization.legalName\n organizationEntity.displayName = organization.displayName\n organizationEntity.ownerId = organization.ownerId\n organizationEntity.tenantId = organization.tenantId\n organizationEntity.metadata = organization.metadata\n ? organization.metadata.map(contactMetadataItemEntityFrom).filter((entity): entity is ContactMetadataItemEntity => entity !== undefined)\n : []\n\n return organizationEntity\n}\n\nexport const organizationFrom = (organization: OrganizationEntity): Organization => {\n const result: Organization = {\n id: organization.id,\n legalName: organization.legalName,\n displayName: organization.displayName,\n metadata: organization.metadata ? organization.metadata.map((item: ContactMetadataItemEntity) => metadataItemFrom(item)) : [],\n ownerId: organization.ownerId,\n tenantId: organization.tenantId,\n createdAt: organization.createdAt,\n lastUpdatedAt: organization.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const partyRelationshipEntityFrom = (relationship: NonPersistedPartyRelationship): PartyRelationshipEntity => {\n const partyRelationshipEntity: PartyRelationshipEntity = new PartyRelationshipEntity()\n partyRelationshipEntity.leftId = relationship.leftId\n partyRelationshipEntity.rightId = relationship.rightId\n partyRelationshipEntity.ownerId = relationship.ownerId\n partyRelationshipEntity.tenantId = relationship.tenantId\n\n return partyRelationshipEntity\n}\n\nexport const partyRelationshipFrom = (relationship: PartyRelationshipEntity): PartyRelationship => {\n const result: PartyRelationship = {\n id: relationship.id,\n leftId: relationship.leftId,\n rightId: relationship.rightId,\n ownerId: relationship.ownerId,\n tenantId: relationship.tenantId,\n createdAt: relationship.createdAt,\n lastUpdatedAt: relationship.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const partyTypeEntityFrom = (args: NonPersistedPartyType): PartyTypeEntity => {\n const partyTypeEntity: PartyTypeEntity = new PartyTypeEntity()\n if (args.id) {\n partyTypeEntity.id = args.id\n }\n partyTypeEntity.type = args.type\n partyTypeEntity.origin = args.origin\n partyTypeEntity.name = args.name\n partyTypeEntity.description = args.description\n partyTypeEntity.tenantId = args.tenantId\n\n return partyTypeEntity\n}\n\nexport const partyTypeFrom = (partyType: PartyTypeEntity): PartyType => {\n const result: PartyType = {\n id: partyType.id,\n type: partyType.type,\n origin: partyType.origin,\n name: partyType.name,\n tenantId: partyType.tenantId,\n description: partyType.description,\n createdAt: partyType.createdAt,\n lastUpdatedAt: partyType.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const configFrom = (config: BaseConfigEntity): ConnectionConfig => {\n if (isOpenIdConfig(config)) {\n return openIdConfigFrom(<OpenIdConfigEntity>config)\n } else if (isDidAuthConfig(config)) {\n return didAuthConfigFrom(<DidAuthConfigEntity>config)\n }\n\n throw new Error('config type not supported')\n}\n\nexport const openIdConfigFrom = (config: OpenIdConfigEntity): OpenIdConfig => {\n const result: OpenIdConfig = {\n id: config.id,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n scopes: config.scopes,\n issuer: config.issuer,\n redirectUrl: config.redirectUrl,\n dangerouslyAllowInsecureHttpRequests: config.dangerouslyAllowInsecureHttpRequests,\n clientAuthMethod: config.clientAuthMethod,\n ownerId: config.ownerId,\n tenantId: config.tenantId,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const didAuthConfigFrom = (config: DidAuthConfigEntity): DidAuthConfig => {\n const result: DidAuthConfig = {\n id: config.id,\n idOpts: { identifier: config.identifier },\n stateId: '', // FIXME\n redirectUrl: config.redirectUrl,\n sessionId: config.sessionId,\n ownerId: config.ownerId,\n tenantId: config.tenantId,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const isOpenIdConfig = (config: NonPersistedConnectionConfig | BaseConfigEntity): config is OpenIdConfig | OpenIdConfigEntity =>\n 'clientSecret' in config && 'issuer' in config && 'redirectUrl' in config\n\nexport const isDidAuthConfig = (config: NonPersistedConnectionConfig | BaseConfigEntity): config is DidAuthConfig | DidAuthConfigEntity =>\n ('identifier' in config || ('idOpts' in config && 'identifier' in config.idOpts)) && 'redirectUrl' in config && 'sessionId' in config\n","import {\n AbstractDigitalCredentialStore,\n AddCredentialArgs,\n CredentialStateType,\n DigitalCredential,\n GetCredentialArgs,\n GetCredentialsArgs,\n GetCredentialsResponse,\n NonPersistedDigitalCredential,\n RemoveCredentialArgs,\n UpdateCredentialStateArgs,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { CredentialRole, OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { DataSource, type FindOptionsOrder, type FindOptionsWhere, Repository } from 'typeorm'\n\nimport { digitalCredentialFrom, digitalCredentialsFrom, nonPersistedDigitalCredentialEntityFromAddArgs } from '../../src'\nimport { DigitalCredentialEntity } from '../entities/digitalCredential/DigitalCredentialEntity'\nimport { parseAndValidateOrderOptions } from '../utils/SortingUtils'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:credential-store')\n\nexport class DigitalCredentialStore extends AbstractDigitalCredentialStore {\n private readonly dbConnection: OrPromise<DataSource>\n private dcRepo: Repository<DigitalCredentialEntity> | undefined\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n addCredential = async (args: AddCredentialArgs): Promise<DigitalCredential> => {\n debug('Adding credential', args)\n const credentialEntity: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs(args)\n const validationError = this.assertValidDigitalCredential(credentialEntity)\n if (validationError) {\n return Promise.reject(validationError)\n }\n const dcRepo = await this.getRepository()\n const createdResult: DigitalCredentialEntity = await dcRepo.save(credentialEntity)\n return Promise.resolve(digitalCredentialFrom(createdResult))\n }\n\n getCredential = async (args: GetCredentialArgs): Promise<DigitalCredential> => {\n const dcRepo = await this.getRepository()\n const result: DigitalCredentialEntity | null = await dcRepo.findOne({\n where: args,\n })\n\n if (!result) {\n return Promise.reject(Error(`No credential found for arg: ${JSON.stringify(args)}`))\n }\n return digitalCredentialFrom(result)\n }\n\n getCredentials = async (args?: GetCredentialsArgs): Promise<GetCredentialsResponse> => {\n const { filter = {}, offset, limit, order = 'createdAt.asc' } = args ?? {}\n const sortOptions: FindOptionsOrder<DigitalCredentialEntity> =\n order && typeof order === 'string'\n ? parseAndValidateOrderOptions<DigitalCredentialEntity>(order)\n : <FindOptionsOrder<DigitalCredentialEntity>>order\n const dcRepo = await this.getRepository()\n const [result, total] = await dcRepo.findAndCount({\n where: filter,\n skip: offset,\n take: limit,\n order: sortOptions,\n })\n return {\n data: digitalCredentialsFrom(result),\n total,\n }\n }\n\n removeCredential = async (args: RemoveCredentialArgs): Promise<boolean> => {\n if (!args) {\n return false\n }\n\n const query: FindOptionsWhere<DigitalCredentialEntity> = {}\n\n if ('id' in args) {\n query.id = args.id\n } else if ('hash' in args) {\n query.hash = args.hash\n } else {\n return false\n }\n try {\n const dcRepo = await this.getRepository()\n // TODO create a flag whether we want to delete recursively or return an error when there are child credentials?\n const affected = await this.deleteTree(dcRepo, query)\n return affected > 0\n } catch (error) {\n console.error('Error removing digital credential:', error)\n return false\n }\n }\n\n private async deleteTree(dcRepo: Repository<DigitalCredentialEntity>, query: FindOptionsWhere<DigitalCredentialEntity>): Promise<number> {\n let affected: number = 0\n const findResult = await dcRepo.findBy(query)\n for (const dc of findResult) {\n affected += await this.deleteTree(dcRepo, { parentId: dc.id })\n const result = await dcRepo.delete(dc.id)\n if (result.affected) {\n affected += result.affected\n }\n }\n return affected\n }\n\n private async getRepository(): Promise<Repository<DigitalCredentialEntity>> {\n if (this.dcRepo !== undefined) {\n return Promise.resolve(this.dcRepo)\n }\n this.dcRepo = (await this.dbConnection).getRepository(DigitalCredentialEntity)\n if (this.dcRepo === undefined) {\n return Promise.reject(Error('Could not get DigitalCredentialEntity repository'))\n }\n return this.dcRepo\n }\n\n updateCredentialState = async (args: UpdateCredentialStateArgs): Promise<DigitalCredential> => {\n const credentialRepository: Repository<DigitalCredentialEntity> = (await this.dbConnection).getRepository(DigitalCredentialEntity)\n const whereClause: Record<string, any> = {}\n if ('id' in args) {\n whereClause.id = args.id\n } else if ('hash' in args) {\n whereClause.hash = args.hash\n } else {\n throw new Error('No id or hash param is provided.')\n }\n if (!args.verifiedState) {\n throw new Error('No verifiedState param is provided.')\n }\n if (args.verifiedState === CredentialStateType.REVOKED && !args.revokedAt) {\n throw new Error('No revokedAt param is provided.')\n }\n if (args.verifiedState !== CredentialStateType.REVOKED && !args.verifiedAt) {\n throw new Error('No verifiedAt param is provided.')\n }\n const credential: DigitalCredentialEntity | null = await credentialRepository.findOne({\n where: whereClause,\n })\n\n if (!credential) {\n return Promise.reject(Error(`No credential found for args: ${JSON.stringify(whereClause)}`))\n }\n const updatedCredential: DigitalCredential = {\n ...credential,\n ...(args.verifiedState !== CredentialStateType.REVOKED && { verifiedAt: args.verifiedAt }),\n ...(args.verifiedState === CredentialStateType.REVOKED && { revokedAt: args.revokedAt }),\n identifierMethod: credential.identifierMethod,\n lastUpdatedAt: new Date(),\n verifiedState: args.verifiedState,\n }\n debug('Updating credential', credential)\n const updatedResult: DigitalCredentialEntity = await credentialRepository.save(updatedCredential, { transaction: true })\n return digitalCredentialFrom(updatedResult)\n }\n\n private assertValidDigitalCredential(credentialEntity: NonPersistedDigitalCredential): Error | undefined {\n const { kmsKeyRef, identifierMethod, credentialRole, isIssuerSigned } = credentialEntity\n\n const isRoleInvalid = credentialRole === CredentialRole.ISSUER || (credentialRole === CredentialRole.HOLDER && !isIssuerSigned)\n\n if (isRoleInvalid && (!kmsKeyRef || !identifierMethod)) {\n const missingFields = []\n\n if (!kmsKeyRef) missingFields.push('kmsKeyRef')\n if (!identifierMethod) missingFields.push('identifierMethod')\n\n const fields = missingFields.join(' and ')\n return new Error(\n `DigitalCredential field(s) ${fields} is/are required for credential role ${credentialRole} with isIssuerSigned=${isIssuerSigned}.`,\n )\n }\n\n return undefined\n }\n}\n","import { BaseEntity, type FindOptionsOrder } from 'typeorm'\n\nexport const parseAndValidateOrderOptions = <T extends BaseEntity>(order: string): FindOptionsOrder<T> => {\n const orderPairs = order.split(',').map((pair) => pair.trim().split('.'))\n const orderOptions: FindOptionsOrder<T> = {}\n\n orderPairs.forEach(([field, direction]) => {\n const dir = direction.toUpperCase()\n if (dir !== 'ASC' && dir !== 'DESC') {\n throw new Error(`Invalid order direction: '${direction}'. Must be 'asc' or 'desc'.`)\n }\n ;(orderOptions as any)[field] = dir\n })\n\n return orderOptions\n}\n","import type {\n IAddCredentialBrandingArgs,\n IAddCredentialLocaleBrandingArgs,\n IAddIssuerBrandingArgs,\n IAddIssuerLocaleBrandingArgs,\n IBasicCredentialLocaleBranding,\n IBasicIssuerLocaleBranding,\n ICredentialBranding,\n ICredentialBrandingFilter,\n ICredentialLocaleBranding,\n ICredentialLocaleBrandingFilter,\n IGetCredentialBrandingArgs,\n IGetCredentialLocaleBrandingArgs,\n IGetIssuerBrandingArgs,\n IGetIssuerLocaleBrandingArgs,\n IIssuerBranding,\n IIssuerBrandingFilter,\n IIssuerLocaleBranding,\n IIssuerLocaleBrandingFilter,\n IPartialCredentialBranding,\n IRemoveCredentialBrandingArgs,\n IRemoveCredentialLocaleBrandingArgs,\n IRemoveIssuerBrandingArgs,\n IRemoveIssuerLocaleBrandingArgs,\n IUpdateCredentialBrandingArgs,\n IUpdateCredentialLocaleBrandingArgs,\n IUpdateIssuerBrandingArgs,\n IUpdateIssuerLocaleBrandingArgs,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { AbstractIssuanceBrandingStore } from '@sphereon/ssi-sdk.data-store-types'\nimport { type OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { DataSource, type DeleteResult, In, Not, type Repository } from 'typeorm'\nimport { BackgroundAttributesEntity } from '../entities/issuanceBranding/BackgroundAttributesEntity'\nimport { BaseLocaleBrandingEntity } from '../entities/issuanceBranding/BaseLocaleBrandingEntity'\nimport { CredentialBrandingEntity } from '../entities/issuanceBranding/CredentialBrandingEntity'\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 {\n credentialBrandingEntityFrom,\n credentialBrandingFrom,\n credentialLocaleBrandingEntityFrom,\n issuerBrandingEntityFrom,\n issuerBrandingFrom,\n issuerLocaleBrandingEntityFrom,\n localeBrandingFrom,\n} from '../utils/issuanceBranding/MappingUtils'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:issuance-branding-store')\n\nexport class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {\n private readonly dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n public addCredentialBranding = async (args: IAddCredentialBrandingArgs): Promise<ICredentialBranding> => {\n const { localeBranding, vcHash } = args\n const repository: Repository<CredentialBrandingEntity> = (await this.dbConnection).getRepository(CredentialBrandingEntity)\n const result: CredentialBrandingEntity | null = await repository.findOne({\n where: [{ vcHash }],\n })\n\n if (result) {\n return Promise.reject(Error(`Credential branding already present for vc with hash: ${vcHash}`))\n }\n\n if (await this.hasDuplicateLocales(localeBranding)) {\n return Promise.reject(Error(`Credential branding contains duplicate locales`))\n }\n\n const credentialBrandingEntity: CredentialBrandingEntity = credentialBrandingEntityFrom(args)\n debug('Adding credential branding', credentialBrandingEntity)\n const createdResult: CredentialBrandingEntity = await repository.save(credentialBrandingEntity)\n\n return credentialBrandingFrom(createdResult)\n }\n\n public getCredentialBranding = async (args?: IGetCredentialBrandingArgs): Promise<Array<ICredentialBranding>> => {\n const { filter } = args ?? {}\n if (filter) {\n filter.forEach((filter: IPartialCredentialBranding): void => {\n if (filter.localeBranding && 'locale' in filter.localeBranding && filter.localeBranding.locale === undefined) {\n filter.localeBranding.locale = ''\n }\n })\n }\n\n debug('Getting credential branding', args)\n const result: Array<CredentialBrandingEntity> = await (await this.dbConnection).getRepository(CredentialBrandingEntity).find({\n ...(filter && { where: filter }),\n })\n\n return result.map((credentialBranding: CredentialBrandingEntity) => credentialBrandingFrom(credentialBranding))\n }\n\n public removeCredentialBranding = async (args: IRemoveCredentialBrandingArgs): Promise<void> => {\n const { filter } = args\n const repository: Repository<CredentialBrandingEntity> = (await this.dbConnection).getRepository(CredentialBrandingEntity)\n const credentialBranding: Array<CredentialBrandingEntity> = await repository.find({\n where: filter,\n })\n\n debug('Removing credential locale branding', args)\n const localeBrandingDeletions: Array<Array<Promise<void>>> = credentialBranding.map((credentialBranding: CredentialBrandingEntity) =>\n credentialBranding.localeBranding.map(\n async (localeBranding: CredentialLocaleBrandingEntity): Promise<void> => this.removeLocaleBranding(localeBranding),\n ),\n )\n await Promise.all(localeBrandingDeletions)\n\n debug('Removing credential branding', args)\n const credentialBrandingDeletions: Array<Promise<DeleteResult>> = filter.map(\n async (filter: ICredentialBrandingFilter): Promise<DeleteResult> => await repository.delete(filter),\n )\n await Promise.all(credentialBrandingDeletions)\n }\n\n public updateCredentialBranding = async (args: IUpdateCredentialBrandingArgs): Promise<ICredentialBranding> => {\n const { credentialBranding } = args\n const repository: Repository<CredentialBrandingEntity> = (await this.dbConnection).getRepository(CredentialBrandingEntity)\n const credentialBrandingEntity: CredentialBrandingEntity | null = await repository.findOne({\n where: { id: credentialBranding.id },\n })\n\n if (!credentialBrandingEntity) {\n return Promise.reject(Error(`No credential branding found for id: ${credentialBranding.id}`))\n }\n\n const branding: Omit<ICredentialBranding, 'createdAt' | 'lastUpdatedAt'> = {\n ...credentialBranding,\n localeBranding: credentialBrandingEntity.localeBranding,\n }\n\n debug('Updating credential branding', branding)\n const result: CredentialBrandingEntity = await repository.save(branding, { transaction: true })\n\n return credentialBrandingFrom(result)\n }\n\n public addCredentialLocaleBranding = async (args: IAddCredentialLocaleBrandingArgs): Promise<ICredentialBranding> => {\n const { credentialBrandingId, localeBranding } = args\n const credentialBrandingRepository: Repository<CredentialBrandingEntity> = (await this.dbConnection).getRepository(CredentialBrandingEntity)\n const credentialBranding: CredentialBrandingEntity | null = await credentialBrandingRepository.findOne({\n where: { id: credentialBrandingId },\n })\n\n if (!credentialBranding) {\n return Promise.reject(Error(`No credential branding found for id: ${credentialBrandingId}`))\n }\n\n const locales: Array<CredentialLocaleBrandingEntity> | null = await (await this.dbConnection).getRepository(CredentialLocaleBrandingEntity).find({\n where: {\n credentialBranding: {\n id: credentialBrandingId,\n },\n locale: In(localeBranding.map((localeBranding: IBasicCredentialLocaleBranding) => localeBranding.locale)),\n },\n })\n\n if (locales && locales.length > 0) {\n return Promise.reject(\n Error(\n `Credential branding already contains locales: ${locales?.map(\n (credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity) => credentialLocaleBrandingEntity.locale,\n )}`,\n ),\n )\n }\n\n const credentialLocaleBrandingRepository: Repository<CredentialLocaleBrandingEntity> = (await this.dbConnection).getRepository(\n CredentialLocaleBrandingEntity,\n )\n const addCredentialLocaleBranding: Array<Promise<void>> = localeBranding.map(\n async (localeBranding: IBasicCredentialLocaleBranding): Promise<void> => {\n const credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity = credentialLocaleBrandingEntityFrom(localeBranding)\n debug('Adding credential locale branding', credentialLocaleBrandingEntity)\n credentialLocaleBrandingEntity.credentialBranding = credentialBranding\n await credentialLocaleBrandingRepository.save(credentialLocaleBrandingEntity, { transaction: true })\n },\n )\n\n await Promise.all(addCredentialLocaleBranding)\n\n const result: CredentialBrandingEntity | null = await credentialBrandingRepository.findOne({\n where: { id: credentialBrandingId },\n })\n\n if (!result) {\n return Promise.reject(Error('Unable to get updated credential branding'))\n }\n\n return credentialBrandingFrom(result)\n }\n\n public getCredentialLocaleBranding = async (args?: IGetCredentialLocaleBrandingArgs): Promise<Array<ICredentialLocaleBranding>> => {\n const { filter } = args ?? {}\n if (filter) {\n filter.forEach((filter: ICredentialLocaleBrandingFilter): void => {\n if ('locale' in filter && filter.locale === undefined) {\n filter.locale = ''\n }\n })\n }\n\n debug('Getting credential locale branding', args)\n const credentialBrandingLocale: Array<CredentialLocaleBrandingEntity> | null = await (await this.dbConnection)\n .getRepository(CredentialLocaleBrandingEntity)\n .find({\n ...(filter && { where: filter }),\n })\n\n return credentialBrandingLocale\n ? credentialBrandingLocale.map(\n (credentialLocaleBranding: CredentialLocaleBrandingEntity) => localeBrandingFrom(credentialLocaleBranding) as ICredentialLocaleBranding,\n )\n : []\n }\n\n public removeCredentialLocaleBranding = async (args: IRemoveCredentialLocaleBrandingArgs): Promise<void> => {\n const { filter } = args\n const credentialLocaleBranding: Array<CredentialLocaleBrandingEntity> = await (await this.dbConnection)\n .getRepository(CredentialLocaleBrandingEntity)\n .find({\n where: filter,\n })\n\n debug('Removing credential locale branding', args)\n const localeBrandingDeletions: Array<Promise<void>> = credentialLocaleBranding.map(\n async (localeBranding: CredentialLocaleBrandingEntity): Promise<void> => this.removeLocaleBranding(localeBranding),\n )\n await Promise.all(localeBrandingDeletions)\n }\n\n public updateCredentialLocaleBranding = async (args: IUpdateCredentialLocaleBrandingArgs): Promise<ICredentialLocaleBranding> => {\n const { localeBranding } = args\n const repository: Repository<CredentialLocaleBrandingEntity> = (await this.dbConnection).getRepository(CredentialLocaleBrandingEntity)\n const result: CredentialLocaleBrandingEntity | null = await repository.findOne({\n where: { id: localeBranding.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No credential locale branding found for id: ${localeBranding.id}`))\n }\n\n const locales: Array<CredentialLocaleBrandingEntity> | null = await repository.find({\n where: {\n credentialBranding: {\n id: result.credentialBrandingId,\n },\n id: Not(In([localeBranding.id])),\n locale: localeBranding.locale,\n },\n })\n\n if (locales && locales.length > 0) {\n return Promise.reject(Error(`Credential branding: ${result.credentialBrandingId} already contains locale: ${localeBranding.locale}`))\n }\n\n debug('Updating credential locale branding', localeBranding)\n const updatedResult: CredentialLocaleBrandingEntity = await repository.save(localeBranding, { transaction: true })\n\n return localeBrandingFrom(updatedResult) as ICredentialLocaleBranding\n }\n\n public addIssuerBranding = async (args: IAddIssuerBrandingArgs): Promise<IIssuerBranding> => {\n const { localeBranding, issuerCorrelationId } = args\n const repository: Repository<IssuerBrandingEntity> = (await this.dbConnection).getRepository(IssuerBrandingEntity)\n const result: IssuerBrandingEntity | null = await repository.findOne({\n where: [{ issuerCorrelationId }],\n })\n\n if (result) {\n return Promise.reject(Error(`Issuer branding already present for issuer with correlation id: ${issuerCorrelationId}`))\n }\n\n if (await this.hasDuplicateLocales(localeBranding)) {\n return Promise.reject(Error(`Issuer branding contains duplicate locales`))\n }\n\n const issuerBrandingEntity: IssuerBrandingEntity = issuerBrandingEntityFrom(args)\n debug('Adding issuer branding', issuerBrandingEntity)\n const createdResult: IssuerBrandingEntity = await repository.save(issuerBrandingEntity)\n\n return issuerBrandingFrom(createdResult)\n }\n\n public getIssuerBranding = async (args?: IGetIssuerBrandingArgs): Promise<Array<IIssuerBranding>> => {\n const { filter } = args ?? {}\n if (filter) {\n filter.forEach((filter: IIssuerBrandingFilter): void => {\n if (filter.localeBranding && 'locale' in filter.localeBranding && filter.localeBranding.locale === undefined) {\n filter.localeBranding.locale = ''\n }\n })\n }\n\n debug('Getting issuer branding', args)\n const result: Array<IssuerBrandingEntity> = await (await this.dbConnection).getRepository(IssuerBrandingEntity).find({\n ...(filter && { where: filter }),\n })\n\n return result.map((issuerBranding: IssuerBrandingEntity) => issuerBrandingFrom(issuerBranding))\n }\n\n public removeIssuerBranding = async (args: IRemoveIssuerBrandingArgs): Promise<void> => {\n const { filter } = args\n const repository: Repository<IssuerBrandingEntity> = (await this.dbConnection).getRepository(IssuerBrandingEntity)\n const issuerBranding: Array<IssuerBrandingEntity> = await repository.find({\n where: filter,\n })\n\n debug('Removing issuer locale branding', args)\n const localeBrandingDeletions: Array<Array<Promise<void>>> = issuerBranding.map((issuerBranding: IssuerBrandingEntity) =>\n issuerBranding.localeBranding.map(\n async (localeBranding: IssuerLocaleBrandingEntity): Promise<void> => this.removeLocaleBranding(localeBranding),\n ),\n )\n await Promise.all(localeBrandingDeletions)\n\n debug('Removing issuer branding', args)\n const issuerBrandingDeletions: Array<Promise<DeleteResult>> = filter.map(\n async (filter: IIssuerBrandingFilter): Promise<DeleteResult> => await repository.delete(filter),\n )\n await Promise.all(issuerBrandingDeletions)\n }\n\n public updateIssuerBranding = async (args: IUpdateIssuerBrandingArgs): Promise<IIssuerBranding> => {\n const { issuerBranding } = args\n const repository: Repository<IssuerBrandingEntity> = (await this.dbConnection).getRepository(IssuerBrandingEntity)\n const issuerBrandingEntity: IssuerBrandingEntity | null = await repository.findOne({\n where: { id: issuerBranding.id },\n })\n\n if (!issuerBrandingEntity) {\n return Promise.reject(Error(`No issuer branding found for id: ${issuerBranding.id}`))\n }\n\n const branding: Omit<IIssuerBranding, 'createdAt' | 'lastUpdatedAt'> = {\n ...issuerBranding,\n localeBranding: issuerBrandingEntity.localeBranding,\n }\n\n debug('Updating issuer branding', branding)\n const result: IssuerBrandingEntity = await repository.save(branding, { transaction: true })\n\n return issuerBrandingFrom(result)\n }\n\n public addIssuerLocaleBranding = async (args: IAddIssuerLocaleBrandingArgs): Promise<IIssuerBranding> => {\n const { localeBranding, issuerBrandingId } = args\n const issuerBrandingRepository: Repository<IssuerBrandingEntity> = (await this.dbConnection).getRepository(IssuerBrandingEntity)\n const issuerBranding: IssuerBrandingEntity | null = await issuerBrandingRepository.findOne({\n where: { id: issuerBrandingId },\n })\n\n if (!issuerBranding) {\n return Promise.reject(Error(`No issuer branding found for id: ${issuerBrandingId}`))\n }\n\n const locales: Array<IssuerLocaleBrandingEntity> | null = await (await this.dbConnection).getRepository(IssuerLocaleBrandingEntity).find({\n where: {\n issuerBranding: {\n id: issuerBrandingId,\n },\n locale: In(localeBranding.map((localeBranding: IBasicIssuerLocaleBranding) => localeBranding.locale)),\n },\n })\n\n if (locales && locales.length > 0) {\n return Promise.reject(\n Error(\n `Issuer branding already contains locales: ${locales?.map(\n (issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity) => issuerLocaleBrandingEntity.locale,\n )}`,\n ),\n )\n }\n\n const issuerLocaleBrandingRepository: Repository<IssuerLocaleBrandingEntity> = (await this.dbConnection).getRepository(IssuerLocaleBrandingEntity)\n const addIssuerLocaleBranding: Array<Promise<void>> = localeBranding.map(async (localeBranding: IBasicIssuerLocaleBranding): Promise<void> => {\n const issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity = issuerLocaleBrandingEntityFrom(localeBranding)\n debug('Adding issuer locale branding', issuerLocaleBrandingEntity)\n issuerLocaleBrandingEntity.issuerBranding = issuerBranding\n await issuerLocaleBrandingRepository.save(issuerLocaleBrandingEntity, { transaction: true })\n })\n\n await Promise.all(addIssuerLocaleBranding)\n\n const result: IssuerBrandingEntity | null = await issuerBrandingRepository.findOne({\n where: { id: issuerBrandingId },\n })\n\n if (!result) {\n return Promise.reject(Error('Unable to get updated issuer branding'))\n }\n\n return issuerBrandingFrom(result)\n }\n\n public getIssuerLocaleBranding = async (args?: IGetIssuerLocaleBrandingArgs): Promise<Array<IIssuerLocaleBranding>> => {\n const { filter } = args ?? {}\n if (filter) {\n filter.forEach((filter: IIssuerLocaleBrandingFilter): void => {\n if ('locale' in filter && filter.locale === undefined) {\n filter.locale = ''\n }\n })\n }\n\n debug('Getting issuer locale branding', args)\n const issuerLocaleBranding: Array<IssuerLocaleBrandingEntity> | null = await (await this.dbConnection)\n .getRepository(IssuerLocaleBrandingEntity)\n .find({\n ...(filter && { where: filter }),\n })\n\n return issuerLocaleBranding\n ? issuerLocaleBranding.map(\n (issuerLocaleBranding: IssuerLocaleBrandingEntity) => localeBrandingFrom(issuerLocaleBranding) as IIssuerLocaleBranding,\n )\n : []\n }\n\n public removeIssuerLocaleBranding = async (args: IRemoveIssuerLocaleBrandingArgs): Promise<void> => {\n const { filter } = args\n const issuerLocaleBranding: Array<IssuerLocaleBrandingEntity> = await (await this.dbConnection).getRepository(IssuerLocaleBrandingEntity).find({\n where: filter,\n })\n\n debug('Removing credential locale branding', args)\n const localeBrandingDeletions: Array<Promise<void>> = issuerLocaleBranding.map(\n async (localeBranding: IssuerLocaleBrandingEntity): Promise<void> => this.removeLocaleBranding(localeBranding),\n )\n await Promise.all(localeBrandingDeletions)\n }\n\n public updateIssuerLocaleBranding = async (args: IUpdateIssuerLocaleBrandingArgs): Promise<IIssuerLocaleBranding> => {\n const { localeBranding } = args\n const repository: Repository<IssuerLocaleBrandingEntity> = (await this.dbConnection).getRepository(IssuerLocaleBrandingEntity)\n const result: IssuerLocaleBrandingEntity | null = await repository.findOne({\n where: { id: localeBranding.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No issuer locale branding found for id: ${localeBranding.id}`))\n }\n\n const locales: Array<IssuerLocaleBrandingEntity> | null = await repository.find({\n where: {\n issuerBranding: {\n id: result.issuerBrandingId,\n },\n id: Not(In([localeBranding.id])),\n locale: localeBranding.locale,\n },\n })\n\n if (locales && locales.length > 0) {\n return Promise.reject(Error(`Issuer branding: ${result.issuerBrandingId} already contains locale: ${localeBranding.locale}`))\n }\n\n debug('Updating issuer locale branding', localeBranding)\n const updatedResult: IssuerLocaleBrandingEntity = await repository.save(localeBranding, { transaction: true })\n\n return localeBrandingFrom(updatedResult) as IIssuerLocaleBranding\n }\n\n private hasDuplicateLocales = async (localeBranding: Array<IBasicCredentialLocaleBranding | IBasicIssuerLocaleBranding>): Promise<boolean> => {\n let seen: Set<string | undefined> = new Set()\n return localeBranding.some((localeBranding: IBasicCredentialLocaleBranding | IBasicIssuerLocaleBranding): boolean => {\n return seen.size === seen.add(localeBranding.locale).size\n })\n }\n\n private removeLocaleBranding = async (localeBranding: BaseLocaleBrandingEntity): Promise<void> => {\n debug('Removing credential locale branding', localeBranding)\n // Delete background image dimensions\n if (localeBranding.background?.image?.dimensions) {\n await (await this.dbConnection).getRepository(ImageDimensionsEntity).delete({ id: localeBranding.background?.image?.dimensions?.id })\n }\n\n // Delete background image\n if (localeBranding.background?.image) {\n await (await this.dbConnection).getRepository(ImageAttributesEntity).delete({ id: localeBranding.background?.image?.id })\n }\n\n // Delete background\n if (localeBranding.background) {\n await (await this.dbConnection).getRepository(BackgroundAttributesEntity).delete({ id: localeBranding.background?.id })\n }\n\n // Delete logo image dimensions\n if (localeBranding.logo?.dimensions) {\n await (await this.dbConnection).getRepository(ImageDimensionsEntity).delete({ id: localeBranding.logo?.dimensions?.id })\n }\n\n // Delete logo\n if (localeBranding.logo) {\n await (await this.dbConnection).getRepository(ImageAttributesEntity).delete({ id: localeBranding.logo?.id })\n }\n\n // Delete text\n if (localeBranding.text) {\n await (await this.dbConnection).getRepository(TextAttributesEntity).delete({ id: localeBranding.text?.id })\n }\n\n // Delete locale branding\n await (await this.dbConnection).getRepository(CredentialLocaleBrandingEntity).delete({ id: localeBranding.id })\n }\n}\n","import type {\n IBasicBackgroundAttributes,\n IBasicCredentialBranding,\n IBasicCredentialClaim,\n IBasicCredentialLocaleBranding,\n IBasicImageAttributes,\n IBasicImageDimensions,\n IBasicIssuerBranding,\n IBasicIssuerLocaleBranding,\n IBasicTextAttributes,\n ICredentialBranding,\n IIssuerBranding,\n ILocaleBranding,\n} from '@sphereon/ssi-sdk.data-store-types'\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 { isEmptyString } from '../../entities/validators'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const credentialBrandingFrom = (credentialBranding: CredentialBrandingEntity): ICredentialBranding => {\n const result: ICredentialBranding = {\n ...credentialBranding,\n localeBranding: credentialBranding.localeBranding.map((localeBranding: BaseLocaleBrandingEntity) => localeBrandingFrom(localeBranding)),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const issuerBrandingFrom = (issuerBranding: IssuerBrandingEntity): IIssuerBranding => {\n const result: IIssuerBranding = {\n ...issuerBranding,\n localeBranding: issuerBranding.localeBranding.map((localeBranding: BaseLocaleBrandingEntity) => localeBrandingFrom(localeBranding)),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const localeBrandingFrom = (localeBranding: BaseLocaleBrandingEntity): ILocaleBranding => {\n const result: ILocaleBranding = {\n ...localeBranding,\n locale: localeBranding.locale === '' ? undefined : localeBranding.locale,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const issuerLocaleBrandingEntityFrom = (args: IBasicIssuerLocaleBranding): IssuerLocaleBrandingEntity => {\n const issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity = new IssuerLocaleBrandingEntity()\n issuerLocaleBrandingEntity.alias = isEmptyString(args.alias) ? undefined : args.alias\n issuerLocaleBrandingEntity.locale = args.locale ? args.locale : ''\n issuerLocaleBrandingEntity.logo = args.logo ? imageAttributesEntityFrom(args.logo) : undefined\n issuerLocaleBrandingEntity.description = isEmptyString(args.description) ? undefined : args.description\n issuerLocaleBrandingEntity.background = args.background ? backgroundAttributesEntityFrom(args.background) : undefined\n issuerLocaleBrandingEntity.text = args.text ? textAttributesEntityFrom(args.text) : undefined\n issuerLocaleBrandingEntity.clientUri = isEmptyString(args.clientUri) ? undefined : args.clientUri\n issuerLocaleBrandingEntity.tosUri = isEmptyString(args.tosUri) ? undefined : args.tosUri\n issuerLocaleBrandingEntity.policyUri = isEmptyString(args.policyUri) ? undefined : args.policyUri\n issuerLocaleBrandingEntity.contacts = args.contacts\n\n return issuerLocaleBrandingEntity\n}\n\nexport const backgroundAttributesEntityFrom = (args: IBasicBackgroundAttributes): BackgroundAttributesEntity => {\n const backgroundAttributesEntity: BackgroundAttributesEntity = new BackgroundAttributesEntity()\n backgroundAttributesEntity.color = isEmptyString(args.color) ? undefined : args.color\n backgroundAttributesEntity.image = args.image ? imageAttributesEntityFrom(args.image) : undefined\n\n return backgroundAttributesEntity\n}\n\nexport const credentialBrandingEntityFrom = (args: IBasicCredentialBranding): CredentialBrandingEntity => {\n const credentialBrandingEntity: CredentialBrandingEntity = new CredentialBrandingEntity()\n credentialBrandingEntity.issuerCorrelationId = args.issuerCorrelationId\n credentialBrandingEntity.vcHash = args.vcHash\n credentialBrandingEntity.localeBranding = args.localeBranding.map((localeBranding: IBasicCredentialLocaleBranding) =>\n credentialLocaleBrandingEntityFrom(localeBranding),\n )\n\n return credentialBrandingEntity\n}\n\nexport const credentialLocaleBrandingEntityFrom = (args: IBasicCredentialLocaleBranding): CredentialLocaleBrandingEntity => {\n const credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity = new CredentialLocaleBrandingEntity()\n credentialLocaleBrandingEntity.alias = isEmptyString(args.alias) ? undefined : args.alias\n credentialLocaleBrandingEntity.locale = args.locale ? args.locale : ''\n credentialLocaleBrandingEntity.logo = args.logo ? imageAttributesEntityFrom(args.logo) : undefined\n credentialLocaleBrandingEntity.description = isEmptyString(args.description) ? undefined : args.description\n credentialLocaleBrandingEntity.background = args.background ? backgroundAttributesEntityFrom(args.background) : undefined\n credentialLocaleBrandingEntity.text = args.text ? textAttributesEntityFrom(args.text) : undefined\n credentialLocaleBrandingEntity.claims = args.claims ? args.claims.map((claim) => credentialClaimsEntityFrom(claim)) : []\n\n return credentialLocaleBrandingEntity\n}\n\nexport const imageAttributesEntityFrom = (args: IBasicImageAttributes): ImageAttributesEntity => {\n const imageAttributesEntity: ImageAttributesEntity = new ImageAttributesEntity()\n imageAttributesEntity.uri = isEmptyString(args.uri) ? undefined : args.uri\n imageAttributesEntity.dataUri = isEmptyString(args.dataUri) ? undefined : args.dataUri\n imageAttributesEntity.mediaType = isEmptyString(args.mediaType) ? undefined : args.mediaType\n imageAttributesEntity.alt = isEmptyString(args.alt) ? undefined : args.alt\n imageAttributesEntity.dimensions = args.dimensions ? imageDimensionsEntityFrom(args.dimensions) : undefined\n\n return imageAttributesEntity\n}\n\nexport const imageDimensionsEntityFrom = (args: IBasicImageDimensions): ImageDimensionsEntity => {\n const imageDimensionsEntity: ImageDimensionsEntity = new ImageDimensionsEntity()\n imageDimensionsEntity.width = args.width\n imageDimensionsEntity.height = args.height\n\n return imageDimensionsEntity\n}\n\nexport const issuerBrandingEntityFrom = (args: IBasicIssuerBranding): IssuerBrandingEntity => {\n const issuerBrandingEntity: IssuerBrandingEntity = new IssuerBrandingEntity()\n issuerBrandingEntity.issuerCorrelationId = args.issuerCorrelationId\n issuerBrandingEntity.localeBranding = args.localeBranding.map((localeBranding: IBasicIssuerLocaleBranding) =>\n issuerLocaleBrandingEntityFrom(localeBranding),\n )\n\n return issuerBrandingEntity\n}\n\nexport const textAttributesEntityFrom = (args: IBasicTextAttributes): TextAttributesEntity => {\n const textAttributesEntity: TextAttributesEntity = new TextAttributesEntity()\n textAttributesEntity.color = isEmptyString(args.color) ? undefined : args.color\n\n return textAttributesEntity\n}\n\nexport const credentialClaimsEntityFrom = (args: IBasicCredentialClaim): CredentialClaimsEntity => {\n const credentialClaimsEntity: CredentialClaimsEntity = new CredentialClaimsEntity()\n credentialClaimsEntity.key = args.key\n credentialClaimsEntity.name = args.name\n\n return credentialClaimsEntity\n}\n","import { type OrPromise, StatusListType } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { DataSource, In, type Repository } from 'typeorm'\nimport { BitstringStatusListEntryEntity } from '../entities/statusList/BitstringStatusListEntryEntity'\nimport { StatusListEntryEntity } from '../entities/statusList/StatusList2021EntryEntity'\nimport { BitstringStatusListEntity, OAuthStatusListEntity, StatusList2021Entity, StatusListEntity } from '../entities/statusList/StatusListEntities'\nimport {\n IAddStatusListArgs,\n IAddStatusListEntryArgs,\n IBitstringStatusListEntity,\n IBitstringStatusListEntryEntity,\n IGetStatusListArgs,\n IGetStatusListEntriesArgs,\n IGetStatusListEntryByCredentialIdArgs,\n IGetStatusListEntryByIndexArgs,\n IGetStatusListsArgs,\n IRemoveStatusListArgs,\n IStatusListEntity,\n IStatusListEntryAvailableArgs,\n IStatusListEntryEntity,\n IUpdateStatusListIndexArgs,\n} from '../types'\nimport { statusListEntityFrom, statusListFrom } from '../utils/statusList/MappingUtils'\nimport type { IStatusListStore } from './IStatusListStore'\n\nconst debug = Debug('sphereon:ssi-sdk:data-store:status-list')\n\nexport class StatusListStore implements IStatusListStore {\n private readonly _dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n this._dbConnection = dbConnection\n }\n\n /**\n * Gets the available status list indices from the provided indices. Meaning it will filter out any index that is already known.\n *\n * The idea is that the caller provides a set of random status list indices. We can relatively easy check against the DB in an optimized way.\n * If the status list is large it is probably best to also provide at least a good number of indices. So something like 10 or 20 values.\n * Callers are also expected to call this function multiple times if it does not yield results\n *\n * @param args\n */\n async availableStatusListEntries(args: IStatusListEntryAvailableArgs): Promise<number[]> {\n const statusListIndex = Array.isArray(args.statusListIndex) ? args.statusListIndex : [args.statusListIndex]\n const statusList = await this.getStatusList({ ...args, id: args.statusListId })\n const repo = await this.getStatusListEntryRepo(statusList.type)\n const results = (\n await repo.find({\n where: {\n statusListId: statusList.id,\n statusListIndex: In(statusListIndex),\n },\n })\n ).map((index) => index.statusListIndex)\n return statusListIndex.filter((index) => !results.includes(index))\n }\n\n async addStatusListEntry(args: IAddStatusListEntryArgs): Promise<IStatusListEntryEntity | IBitstringStatusListEntryEntity> {\n if (!args.statusListId) {\n throw new Error('statusListId is required')\n }\n\n const statusList = await this.getStatusList({ id: args.statusListId })\n return await (await this.getStatusListEntryRepo(statusList.type)).save(args)\n }\n\n async updateStatusListEntry(args: IAddStatusListEntryArgs): Promise<IStatusListEntryEntity | IBitstringStatusListEntryEntity> {\n const statusListId = args.statusListId\n if (!statusListId) {\n throw new Error('statusListId is required')\n }\n\n const statusList = await this.getStatusList({ id: statusListId })\n const result = await this.getStatusListEntryByIndex({ ...args, statusListId, errorOnNotFound: false })\n const updatedEntry: Partial<IStatusListEntryEntity> = {\n ...result,\n ...args,\n statusListId,\n }\n\n const updStatusListId = result?.statusListId ?? statusListId\n const updateResult = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).upsert(\n { ...(result ?? { statusListId: updStatusListId, statusListIndex: args.statusListIndex }), ...updatedEntry },\n { conflictPaths: ['statusList', 'statusListIndex'] },\n )\n debug(updateResult)\n return (await this.getStatusListEntryByIndex({\n ...args,\n statusListId: updStatusListId,\n errorOnNotFound: true,\n }))!\n }\n\n async getStatusListEntryByIndex({\n statusListId,\n statusListCorrelationId,\n statusListIndex,\n entryCorrelationId,\n errorOnNotFound,\n }: IGetStatusListEntryByIndexArgs): Promise<StatusListEntryEntity | BitstringStatusListEntryEntity | undefined> {\n if (!statusListId && !statusListCorrelationId) {\n throw Error(`Cannot get statusList entry without either a statusList id or statusListCorrelationId`)\n }\n\n if (!statusListIndex && !entryCorrelationId) {\n throw Error(`Cannot get statusList entry without either a statusListIndex or entryCorrelationId`)\n }\n\n const statusList = statusListId\n ? await this.getStatusList({ id: statusListId })\n : await this.getStatusList({ correlationId: statusListCorrelationId })\n\n const result = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).findOne({\n where: {\n ...(statusListId && { statusListId }),\n ...(!statusListId && statusListCorrelationId && { statusList: { correlationId: statusListCorrelationId } }),\n ...(statusListIndex && { statusListIndex }),\n ...(entryCorrelationId && { entryCorrelationId }),\n },\n relations: {\n statusList: true,\n },\n })\n\n if (!result && errorOnNotFound) {\n throw Error(`Could not find status list entry with provided filters`)\n }\n\n return result ?? undefined\n }\n\n async getStatusListEntryByCredentialId(\n args: IGetStatusListEntryByCredentialIdArgs,\n ): Promise<StatusListEntryEntity | BitstringStatusListEntryEntity | undefined> {\n const credentialId = args.credentialId\n if (!credentialId) {\n throw Error('Can only get a credential by credentialId when a credentialId is supplied')\n }\n const statusList = await this.getStatusList({\n id: args.statusListId,\n correlationId: args.statusListCorrelationId,\n })\n const where = {\n statusList: { id: statusList.id },\n ...(args.entryCorrelationId && { correlationId: args.entryCorrelationId }),\n credentialId,\n }\n debug(`Entries: ${JSON.stringify(await (await this.getStatusListEntryRepo(statusList.type)).find(), null, 2)}`)\n const result = await (await this.getStatusListEntryRepo(statusList.type)).findOne({ where })\n\n if (!result && args.errorOnNotFound) {\n throw Error(`Could not find status list credential id ${credentialId} for status list id ${statusList.id}`)\n }\n return result ?? undefined\n }\n\n async removeStatusListEntryByCredentialId(args: IGetStatusListEntryByCredentialIdArgs): Promise<boolean> {\n let error = false\n try {\n await this.getStatusListEntryByCredentialId(args) // only used to check it exists\n } catch (error) {\n error = true\n }\n if (!error) {\n const statusList = await this.getStatusList({\n id: args.statusListId,\n correlationId: args.statusListCorrelationId,\n })\n const result = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).delete({\n ...(args.statusListId && { statusList: args.statusListId }),\n ...(args.entryCorrelationId && { correlationId: args.entryCorrelationId }),\n credentialId: args.credentialId,\n })\n error = !result.affected || result.affected !== 1\n }\n return !error\n }\n\n async removeStatusListEntryByIndex(args: IGetStatusListEntryByIndexArgs): Promise<boolean> {\n let error = false\n try {\n await this.getStatusListEntryByIndex(args)\n } catch (error) {\n error = true\n }\n if (error) {\n console.error(`Could not delete statusList ${args.statusListId} entry by index ${args.statusListIndex}`)\n } else {\n const statusList = await this.getStatusList({ id: args.statusListId })\n const result = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).delete({\n ...(args.statusListId && { statusList: args.statusListId }),\n ...(args.entryCorrelationId && { correlationId: args.entryCorrelationId }),\n statusListIndex: args.statusListIndex,\n })\n error = !result.affected || result.affected !== 1\n }\n return !error\n }\n\n async getStatusListEntries(args: IGetStatusListEntriesArgs): Promise<Array<IStatusListEntryEntity | IBitstringStatusListEntryEntity>> {\n const statusList = await this.getStatusList({ id: args.statusListId })\n const results = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).find({\n where: { ...args?.filter, statusList: args.statusListId },\n })\n return results as Array<IStatusListEntryEntity | IBitstringStatusListEntryEntity>\n }\n\n private async getStatusListEntity(args: IGetStatusListArgs): Promise<StatusListEntity> {\n if (!args.id && !args.correlationId) {\n throw Error(`At least and 'id' or 'correlationId' needs to be provided to lookup a status list`)\n }\n const where = []\n if (args.id) {\n where.push({ id: args.id })\n } else if (args.correlationId) {\n where.push({ correlationId: args.correlationId })\n }\n const result = await (await this.getStatusListRepo()).findOne({ where })\n if (!result) {\n throw Error(`No status list found for id ${args.id}`)\n }\n return result\n }\n\n async getStatusList(args: IGetStatusListArgs): Promise<IStatusListEntity | IBitstringStatusListEntity> {\n const entity = await this.getStatusListEntity(args)\n return statusListFrom(entity) as IStatusListEntity | IBitstringStatusListEntity\n }\n\n async getStatusLists(args: IGetStatusListsArgs): Promise<Array<IStatusListEntity | IBitstringStatusListEntity>> {\n const result = await (\n await this.getStatusListRepo()\n ).find({\n where: args.filter,\n })\n\n if (!result) {\n return []\n }\n\n return result.map((entity) => statusListFrom(entity) as IStatusListEntity | IBitstringStatusListEntity)\n }\n\n async addStatusList(args: IAddStatusListArgs): Promise<IStatusListEntity> {\n const { id, correlationId } = args\n\n const result = await (\n await this.getStatusListRepo()\n ).findOne({\n where: [{ id }, { correlationId }],\n })\n if (result) {\n throw Error(`Status list for id ${id}, correlationId ${correlationId} already exists`)\n }\n\n debug('Adding status list ', id)\n const entity = statusListEntityFrom(args)\n const createdResult = await (await this.getStatusListRepo(args.type)).save(entity)\n return statusListFrom(createdResult)\n }\n\n async updateStatusList(args: IUpdateStatusListIndexArgs): Promise<IStatusListEntity | IBitstringStatusListEntity> {\n const result = await this.getStatusList(args)\n debug('Updating status list', result)\n const entity = statusListEntityFrom(args)\n const updatedResult = await (await this.getStatusListRepo(args.type)).save(entity, { transaction: true })\n return statusListFrom(updatedResult)\n }\n\n async removeStatusList(args: IRemoveStatusListArgs): Promise<boolean> {\n const result = await this.getStatusListEntity(args)\n\n await (await this.getStatusListEntryRepo(result.type)).delete({ statusListId: result.id })\n const deletedEntity = await (await this.getStatusListRepo()).remove(result)\n\n return Boolean(deletedEntity)\n }\n\n private async getDS(): Promise<DataSource> {\n return this._dbConnection\n }\n\n async getStatusListRepo(type?: StatusListType): Promise<Repository<StatusListEntity>> {\n const dataSource = await this.getDS()\n switch (type) {\n case StatusListType.StatusList2021:\n return dataSource.getRepository(StatusList2021Entity)\n case StatusListType.OAuthStatusList:\n return dataSource.getRepository(OAuthStatusListEntity)\n case StatusListType.BitstringStatusList:\n return dataSource.getRepository(BitstringStatusListEntity)\n default:\n return dataSource.getRepository(StatusListEntity)\n }\n }\n\n async getStatusListEntryRepo(type?: StatusListType): Promise<Repository<StatusListEntryEntity | BitstringStatusListEntryEntity>> {\n const dataSource = await this.getDS()\n switch (type) {\n case StatusListType.BitstringStatusList:\n return dataSource.getRepository(BitstringStatusListEntryEntity)\n default:\n return dataSource.getRepository(StatusListEntryEntity)\n }\n }\n}\n","import { IBitstringStatusListEntity, IOAuthStatusListEntity, IStatusList2021Entity, IStatusListEntity } from '../../types'\nimport { StatusListType } from '@sphereon/ssi-types'\nimport {\n BitstringStatusListEntity,\n OAuthStatusListEntity,\n StatusList2021Entity,\n StatusListEntity,\n} from '../../entities/statusList/StatusListEntities'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const statusListEntityFrom = (args: IStatusListEntity): StatusListEntity => {\n switch (args.type) {\n case StatusListType.StatusList2021: {\n const entity = new StatusList2021Entity()\n const sl2021 = args as IStatusList2021Entity\n entity.indexingDirection = sl2021.indexingDirection\n entity.statusPurpose = sl2021.statusPurpose\n setBaseFields(entity, args)\n Object.defineProperty(entity, 'type', {\n value: StatusListType.StatusList2021,\n enumerable: true,\n configurable: true,\n })\n return entity\n }\n\n case StatusListType.OAuthStatusList: {\n const entity = new OAuthStatusListEntity()\n const oauthSl = args as IOAuthStatusListEntity\n entity.bitsPerStatus = oauthSl.bitsPerStatus\n entity.expiresAt = oauthSl.expiresAt\n setBaseFields(entity, args)\n Object.defineProperty(entity, 'type', {\n value: StatusListType.OAuthStatusList,\n enumerable: true,\n configurable: true,\n })\n return entity\n }\n\n case StatusListType.BitstringStatusList: {\n const entity = new BitstringStatusListEntity()\n const bitstringsl = args as IBitstringStatusListEntity\n if (!bitstringsl.bitsPerStatus) {\n throw Error('bitsPerStatus must be set for BitstringStatusList')\n }\n\n entity.statusPurpose = bitstringsl.statusPurpose\n entity.bitsPerStatus = bitstringsl.bitsPerStatus\n entity.validFrom = bitstringsl.validFrom\n entity.validUntil = bitstringsl.validUntil\n entity.ttl = bitstringsl.ttl\n setBaseFields(entity, args)\n Object.defineProperty(entity, 'type', {\n value: StatusListType.BitstringStatusList,\n enumerable: true,\n configurable: true,\n })\n return entity\n }\n\n default:\n throw new Error(`Invalid status list type ${args.type}`)\n }\n}\n\nexport const statusListFrom = (entity: StatusListEntity): IStatusListEntity | IBitstringStatusListEntity => {\n if (entity instanceof StatusList2021Entity) {\n const result: IStatusList2021Entity = {\n ...getBaseFields(entity),\n type: StatusListType.StatusList2021,\n indexingDirection: entity.indexingDirection,\n statusPurpose: entity.statusPurpose,\n }\n return replaceNullWithUndefined(result)\n }\n\n if (entity instanceof OAuthStatusListEntity) {\n const result: IOAuthStatusListEntity = {\n ...getBaseFields(entity),\n type: StatusListType.OAuthStatusList,\n bitsPerStatus: entity.bitsPerStatus,\n expiresAt: entity.expiresAt,\n }\n return replaceNullWithUndefined(result)\n }\n\n if (entity instanceof BitstringStatusListEntity) {\n const result: IBitstringStatusListEntity = {\n ...getBaseFields(entity),\n type: StatusListType.BitstringStatusList,\n statusPurpose: entity.statusPurpose,\n bitsPerStatus: entity.bitsPerStatus,\n validFrom: entity.validFrom,\n validUntil: entity.validUntil,\n ttl: entity.ttl,\n }\n return replaceNullWithUndefined(result)\n }\n throw new Error(`Invalid status list type ${typeof entity}`)\n}\n\nconst setBaseFields = (entity: StatusListEntity, args: IStatusListEntity) => {\n entity.id = args.id\n entity.correlationId = args.correlationId\n entity.length = args.length\n entity.issuer = args.issuer\n entity.driverType = args.driverType\n entity.credentialIdMode = args.credentialIdMode\n entity.proofFormat = args.proofFormat\n entity.statusListCredential = args.statusListCredential\n}\n\nconst getBaseFields = (entity: StatusListEntity): Omit<IStatusListEntity, 'type'> => ({\n id: entity.id,\n correlationId: entity.correlationId,\n length: entity.length,\n issuer: entity.issuer,\n driverType: entity.driverType,\n credentialIdMode: entity.credentialIdMode,\n proofFormat: entity.proofFormat,\n statusListCredential: entity.statusListCredential,\n})\n","import { 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} 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\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 type { ActivityLoggingEvent, AuditLoggingEvent } from '@sphereon/ssi-sdk.core'\nimport type { GetActivityEventsArgs, GetAuditEventsArgs, StoreActivityEventArgs, StoreAuditEventArgs } from '@sphereon/ssi-sdk.data-store-types'\nimport { AbstractEventLoggerStore } from '@sphereon/ssi-sdk.data-store-types'\nimport { LoggingEventType, type OrPromise } from '@sphereon/ssi-types'\nimport Debug, { Debugger } from 'debug'\nimport { DataSource } from 'typeorm'\nimport { AuditEventEntity } from '../entities/eventLogger/AuditEventEntity'\nimport { activityEventEntityFrom, activityEventFrom, auditEventEntityFrom, auditEventFrom } from '../utils/eventLogger/MappingUtils'\n\nconst debug: Debugger = Debug('sphereon:ssi-sdk:event-store')\n\nexport class EventLoggerStore extends AbstractEventLoggerStore {\n private readonly dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n getAuditEvents = async (args?: GetAuditEventsArgs): Promise<Array<AuditLoggingEvent>> => {\n const { filter = [] } = args ?? {}\n\n const auditEventsFilter = filter.map((item) => ({ ...item, type: LoggingEventType.AUDIT }))\n if (auditEventsFilter.length === 0) {\n auditEventsFilter.push({ type: LoggingEventType.AUDIT })\n }\n\n const connection = await this.dbConnection\n debug('Getting audit events', args)\n const result = await connection.getRepository(AuditEventEntity).find({\n where: auditEventsFilter,\n })\n\n return result.map((event: AuditEventEntity) => auditEventFrom(event))\n }\n\n storeAuditEvent = async (args: StoreAuditEventArgs): Promise<AuditLoggingEvent> => {\n const { event } = args\n\n const auditEventEntity = auditEventEntityFrom(event)\n const connection = await this.dbConnection\n debug('Storing audit event', auditEventEntity)\n const createdResult = await connection.getRepository(AuditEventEntity).save(auditEventEntity)\n\n return auditEventFrom(createdResult)\n }\n\n getActivityEvents = async (args?: GetActivityEventsArgs): Promise<Array<ActivityLoggingEvent>> => {\n const { filter = [] } = args ?? {}\n\n const activityEventsFilter = filter.map((item) => ({ ...item, type: LoggingEventType.ACTIVITY }))\n if (activityEventsFilter.length === 0) {\n activityEventsFilter.push({ type: LoggingEventType.ACTIVITY })\n }\n\n const connection = await this.dbConnection\n debug('Getting activity events', args)\n const result = await connection.getRepository(AuditEventEntity).find({\n where: activityEventsFilter,\n })\n\n return result.map((event: AuditEventEntity) => activityEventFrom(event))\n }\n\n storeActivityEvent = async (args: StoreActivityEventArgs): Promise<ActivityLoggingEvent> => {\n const { event } = args\n\n const activityEventEntity = activityEventEntityFrom(event)\n const connection = await this.dbConnection\n debug('Storing activity event', activityEventEntity)\n const createdResult = await connection.getRepository(AuditEventEntity).save(activityEventEntity)\n\n return activityEventFrom(createdResult)\n }\n}\n","import type { ActivityLoggingEvent, AuditLoggingEvent } from '@sphereon/ssi-sdk.core'\nimport type { NonPersistedActivityLoggingEvent, NonPersistedAuditLoggingEvent } from '@sphereon/ssi-sdk.data-store-types'\nimport { LoggingEventType } from '@sphereon/ssi-types'\nimport { AuditEventEntity } from '../../entities/eventLogger/AuditEventEntity'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const auditEventFrom = (event: AuditEventEntity): AuditLoggingEvent => {\n const result: AuditLoggingEvent = {\n id: event.id,\n type: LoggingEventType.AUDIT,\n description: event.description,\n timestamp: event.timestamp,\n level: event.level,\n correlationId: event.correlationId,\n actionType: event.actionType,\n actionSubType: event.actionSubType,\n initiatorType: event.initiatorType,\n partyAlias: event.partyAlias,\n partyCorrelationId: event.partyCorrelationId,\n partyCorrelationType: event.partyCorrelationType,\n subSystemType: event.subSystemType,\n system: event.system,\n systemAlias: event.systemAlias,\n systemCorrelationId: event.systemCorrelationId,\n systemCorrelationIdType: event.systemCorrelationIdType,\n ...(event.data && { data: JSON.parse(event.data) }),\n ...(event.diagnosticData && { diagnosticData: JSON.parse(event.diagnosticData) }),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const auditEventEntityFrom = (args: NonPersistedAuditLoggingEvent): AuditEventEntity => {\n const auditEventEntity: AuditEventEntity = new AuditEventEntity()\n auditEventEntity.type = LoggingEventType.AUDIT\n auditEventEntity.timestamp = args.timestamp\n auditEventEntity.level = args.level\n auditEventEntity.correlationId = args.correlationId\n auditEventEntity.system = args.system\n auditEventEntity.subSystemType = args.subSystemType\n auditEventEntity.actionType = args.actionType\n auditEventEntity.actionSubType = args.actionSubType\n auditEventEntity.initiatorType = args.initiatorType\n auditEventEntity.systemCorrelationIdType = args.systemCorrelationIdType\n auditEventEntity.systemCorrelationId = args.systemCorrelationId\n auditEventEntity.systemAlias = args.systemAlias\n auditEventEntity.partyCorrelationType = args.partyCorrelationType\n auditEventEntity.partyCorrelationId = args.partyCorrelationId\n auditEventEntity.partyAlias = args.partyAlias\n auditEventEntity.description = args.description\n auditEventEntity.partyCorrelationType = args.partyCorrelationType\n auditEventEntity.data = JSON.stringify(args.data)\n auditEventEntity.diagnosticData = JSON.stringify(args.diagnosticData)\n\n return auditEventEntity\n}\n\nexport const activityEventFrom = (event: AuditEventEntity): ActivityLoggingEvent => {\n const result: ActivityLoggingEvent = {\n id: event.id,\n type: LoggingEventType.ACTIVITY,\n credentialType: event.credentialType!,\n originalCredential: event.originalCredential,\n credentialHash: event.credentialHash,\n parentCredentialHash: event.parentCredentialHash,\n sharePurpose: event.sharePurpose,\n description: event.description,\n timestamp: event.timestamp,\n level: event.level,\n correlationId: event.correlationId,\n actionType: event.actionType,\n actionSubType: event.actionSubType,\n initiatorType: event.initiatorType,\n partyAlias: event.partyAlias,\n partyCorrelationId: event.partyCorrelationId,\n partyCorrelationType: event.partyCorrelationType,\n subSystemType: event.subSystemType,\n system: event.system,\n systemAlias: event.systemAlias,\n systemCorrelationId: event.systemCorrelationId,\n systemCorrelationIdType: event.systemCorrelationIdType,\n ...(event.data && { data: JSON.parse(event.data) }),\n ...(event.diagnosticData && { diagnosticData: JSON.parse(event.diagnosticData) }),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const activityEventEntityFrom = (args: NonPersistedActivityLoggingEvent): AuditEventEntity => {\n const activityEventEntity: AuditEventEntity = new AuditEventEntity()\n activityEventEntity.type = LoggingEventType.ACTIVITY\n activityEventEntity.timestamp = args.timestamp\n activityEventEntity.level = args.level\n activityEventEntity.correlationId = args.correlationId\n activityEventEntity.system = args.system\n activityEventEntity.subSystemType = args.subSystemType\n activityEventEntity.actionType = args.actionType\n activityEventEntity.actionSubType = args.actionSubType\n activityEventEntity.initiatorType = args.initiatorType\n activityEventEntity.systemCorrelationIdType = args.systemCorrelationIdType\n activityEventEntity.systemCorrelationId = args.systemCorrelationId\n activityEventEntity.systemAlias = args.systemAlias\n activityEventEntity.partyCorrelationType = args.partyCorrelationType\n activityEventEntity.partyCorrelationId = args.partyCorrelationId\n activityEventEntity.partyAlias = args.partyAlias\n activityEventEntity.description = args.description\n activityEventEntity.partyCorrelationType = args.partyCorrelationType\n activityEventEntity.data = JSON.stringify(args.data)\n activityEventEntity.sharePurpose = args.sharePurpose\n activityEventEntity.credentialType = args.credentialType\n activityEventEntity.originalCredential = args.originalCredential\n activityEventEntity.credentialHash = args.credentialHash\n activityEventEntity.parentCredentialHash = args.parentCredentialHash\n activityEventEntity.diagnosticData = JSON.stringify(args.diagnosticData)\n\n return activityEventEntity\n}\n","import type {\n StoreFindMachineStatesArgs,\n StoreMachineStateDeleteArgs,\n StoreMachineStateDeleteExpiredArgs,\n StoreMachineStateGetArgs,\n StoreMachineStateInfo,\n StoreMachineStatePersistArgs,\n StoreMachineStatesFindActiveArgs,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { IAbstractMachineStateStore } from '@sphereon/ssi-sdk.data-store-types'\nimport { type OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { Brackets, DataSource, type FindOptionsWhere, IsNull, LessThan, Not } from 'typeorm'\n\nimport { MachineStateInfoEntity } from '../entities/machineState/MachineStateInfoEntity'\n\nconst debug = Debug('sphereon:ssi-sdk:machine-state:store')\n\n/**\n * Represents a data store for managing machine states.\n */\nexport class MachineStateStore extends IAbstractMachineStateStore {\n private readonly _dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this._dbConnection = dbConnection\n }\n\n async persistMachineState(state: StoreMachineStatePersistArgs): Promise<StoreMachineStateInfo> {\n const connection: DataSource = await this._dbConnection\n const { machineName, instanceId, tenantId } = state\n debug(`Executing persistMachineState for machine ${machineName}, instance ${instanceId}, tenantId: ${tenantId}...`)\n const entity = MachineStateStore.machineStateInfoEntityFrom(state)\n const existing = await connection.getRepository(MachineStateInfoEntity).findOne({\n where: {\n instanceId: state.instanceId,\n },\n })\n if (existing && existing.updatedCount > state.updatedCount) {\n const error = `Updating machine state with an older version is not allowed. Machine ${existing.machineName}, last count: ${\n existing.updatedCount\n }, new count: ${existing.updatedCount}, last updated: ${existing.updatedAt}, current: ${new Date()}, instance: ${existing.instanceId}`\n console.log(error)\n return Promise.reject(new Error(error))\n }\n // No need for a transaction. This is a single entity. We don't want to be surprised by an isolation level hiding the state from others\n const result = await connection.getRepository(MachineStateInfoEntity).save(entity, { transaction: false })\n debug(`Done persistMachineState machine ${machineName}, instance ${instanceId}, tenantId: ${tenantId}`)\n return MachineStateStore.machineInfoFrom(result)\n }\n\n async findActiveMachineStates(args: StoreMachineStatesFindActiveArgs): Promise<Array<StoreMachineStateInfo>> {\n const { tenantId, machineName, instanceId } = args\n const connection: DataSource = await this._dbConnection\n debug(`Executing findActiveMachineStates query with machineName: ${machineName}, tenantId: ${tenantId}`)\n const queryBuilder = connection\n .getRepository(MachineStateInfoEntity)\n .createQueryBuilder('state')\n .where('state.completedAt IS NULL')\n .andWhere(\n new Brackets((qb) => {\n qb.where('state.expiresAt IS NULL').orWhere('state.expiresAt > :now', { now: new Date() })\n }),\n )\n\n if (instanceId) {\n queryBuilder.andWhere('state.instanceId = :instanceId', { instanceId })\n }\n if (tenantId) {\n queryBuilder.andWhere('state.tenantId = :tenantId', { tenantId })\n }\n if (machineName) {\n queryBuilder.andWhere('state.machineName = :machineName', { machineName })\n }\n\n return (\n (await queryBuilder\n .orderBy('state.updatedAt', 'DESC')\n .getMany()\n .then((entities) => entities.map(MachineStateStore.machineInfoFrom))) ?? []\n )\n }\n\n async findMachineStates(args?: StoreFindMachineStatesArgs): Promise<Array<StoreMachineStateInfo>> {\n const connection: DataSource = await this._dbConnection\n debug('findMachineStates', args)\n const result: Array<MachineStateInfoEntity> = await connection.getRepository(MachineStateInfoEntity).find({\n ...(args?.filter && { where: args?.filter }),\n transaction: false,\n })\n\n return result.map((event: MachineStateInfoEntity) => MachineStateStore.machineInfoFrom(event))\n }\n\n async getMachineState(args: StoreMachineStateGetArgs): Promise<StoreMachineStateInfo> {\n const connection: DataSource = await this._dbConnection\n debug('getMachineState', args)\n return connection.getRepository(MachineStateInfoEntity).findOneOrFail({ where: { instanceId: args.instanceId } })\n }\n\n async deleteMachineState(args: StoreMachineStateDeleteArgs): Promise<boolean> {\n debug(`Executing deleteMachineState query with id: ${args.instanceId}`)\n if (!args.instanceId) {\n throw new Error('No instanceId parameter is provided.')\n }\n try {\n const connection: DataSource = await this._dbConnection\n\n const result = await connection.getRepository(MachineStateInfoEntity).delete(args.instanceId)\n return result.affected != null && result.affected > 0\n } catch (error) {\n debug(`Error deleting state: ${error}`)\n return false\n }\n }\n\n async deleteExpiredMachineStates(args: StoreMachineStateDeleteExpiredArgs): Promise<number> {\n const { machineName, tenantId, deleteDoneStates } = args\n debug(`Executing deleteExpiredMachineStates query with params: ${JSON.stringify(args)}`)\n try {\n const connection: DataSource = await this._dbConnection\n\n const deleteCriteria: FindOptionsWhere<MachineStateInfoEntity> = {\n ...(machineName && { machineName }),\n ...(tenantId && { tenantId }),\n // When deleteOnDone state is set we only look at completedAt, in other cases we compare current time with expiresAt\n ...(!deleteDoneStates && { expiresAt: LessThan(new Date()) }),\n ...(deleteDoneStates && { completedAt: Not(IsNull()) }),\n }\n const result = await connection.getRepository(MachineStateInfoEntity).delete(deleteCriteria)\n return result.affected ?? 0\n } catch (error) {\n debug(`Error deleting machine info: ${error}`)\n return Promise.reject(new Error(`Error deleting expired machine states for machine type ${machineName}`))\n }\n }\n\n protected static machineInfoFrom = (machineStateInfoEntity: MachineStateInfoEntity): StoreMachineStateInfo => {\n // We are making sure no entity function get copied\n return JSON.parse(JSON.stringify(machineStateInfoEntity))\n }\n\n static machineStateInfoEntityFrom = (machineStateInfo: StoreMachineStateInfo | StoreMachineStatePersistArgs): MachineStateInfoEntity => {\n const entity = new MachineStateInfoEntity()\n Object.assign(entity, machineStateInfo)\n return entity\n }\n}\n","import type {\n DcqlQueryItem,\n DcqlQueryItemFilter,\n DeleteDefinitionArgs,\n DeleteDefinitionsArgs,\n GetDefinitionArgs,\n GetDefinitionsArgs,\n HasDefinitionArgs,\n HasDefinitionsArgs,\n NonPersistedDcqlQueryItem,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { AbstractPDStore } from '@sphereon/ssi-sdk.data-store-types'\nimport { type OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { DataSource, In, Repository } from 'typeorm'\nimport { DcqlQueryItemEntity } from '../entities/presentationDefinition/DcqlQueryItemEntity'\nimport { dcqlQueryEntityItemFrom, dcqlQueryItemFrom } from '../utils/presentationDefinition/MappingUtils'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:pd-store')\n\nexport class PDStore extends AbstractPDStore {\n private readonly dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n getDefinition = async (args: GetDefinitionArgs): Promise<DcqlQueryItem> => {\n const { itemId } = args ?? {}\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n const result: DcqlQueryItemEntity | null = await pdRepository.findOne({\n where: { id: itemId },\n })\n if (!result) {\n return Promise.reject(Error(`No presentation definition item found for id: ${itemId}`))\n }\n\n return dcqlQueryItemFrom(result)\n }\n\n hasDefinition = async (args: HasDefinitionArgs): Promise<boolean> => {\n const { itemId } = args ?? {}\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n\n const resultCount: number = await pdRepository.count({\n where: { id: itemId },\n })\n\n return resultCount > 0\n }\n\n hasDefinitions = async (args: HasDefinitionsArgs): Promise<boolean> => {\n const { filter } = args\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n\n const resultCount: number = await pdRepository.count({\n ...(filter && { where: cleanFilter(filter) }),\n })\n return resultCount > 0\n }\n\n getDefinitions = async (args: GetDefinitionsArgs): Promise<Array<DcqlQueryItem>> => {\n const { filter } = args\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n const initialResult = await this.findIds(pdRepository, filter)\n const result: Array<DcqlQueryItemEntity> = await pdRepository.find({\n where: {\n id: In(initialResult.map((entity: DcqlQueryItemEntity) => entity.id)),\n },\n order: {\n version: 'DESC',\n },\n })\n\n return result.map((entity: DcqlQueryItemEntity) => dcqlQueryItemFrom(entity))\n }\n\n addDefinition = async (item: NonPersistedDcqlQueryItem): Promise<DcqlQueryItem> => {\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n\n const entity: DcqlQueryItemEntity = dcqlQueryEntityItemFrom(item)\n debug('Adding presentation definition entity', item)\n const result: DcqlQueryItemEntity = await pdRepository.save(entity, {\n transaction: true,\n })\n\n return dcqlQueryItemFrom(result)\n }\n\n updateDefinition = async (item: DcqlQueryItem): Promise<DcqlQueryItem> => {\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n\n const result: DcqlQueryItemEntity | null = await pdRepository.findOne({\n where: { id: item.id },\n })\n if (!result) {\n return Promise.reject(Error(`No presentation definition entity found for id: ${item.id}`))\n }\n\n const updatedEntity: Partial<DcqlQueryItemEntity> = {\n ...result,\n }\n updatedEntity.tenantId = item.tenantId\n updatedEntity.queryId = item.queryId!\n updatedEntity.version = item.version\n updatedEntity.name = item.name\n updatedEntity.purpose = item.purpose\n updatedEntity.query = JSON.stringify(item.query)\n\n debug('Updating presentation definition entity', updatedEntity)\n const updateResult: DcqlQueryItemEntity = await pdRepository.save(updatedEntity, {\n transaction: true,\n })\n\n return dcqlQueryItemFrom(updateResult)\n }\n\n deleteDefinition = async (args: DeleteDefinitionArgs): Promise<void> => {\n const { itemId } = args\n\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n const entity: DcqlQueryItemEntity | null = await pdRepository.findOne({\n where: { id: itemId },\n })\n\n if (!entity) {\n return Promise.reject(Error(`No presentation definition found with id: ${itemId}`))\n }\n\n debug('Deleting presentation definition entity', entity)\n await pdRepository.delete(entity.id)\n }\n\n deleteDefinitions = async (args: DeleteDefinitionsArgs): Promise<number> => {\n const { filter } = args\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n const initialResult = await this.findIds(pdRepository, filter)\n\n const result: Array<DcqlQueryItemEntity> = await pdRepository.find({\n where: {\n id: In(initialResult.map((entity: DcqlQueryItemEntity) => entity.id)),\n },\n })\n\n for (const entity of result) {\n debug('Deleting presentation definition entity', entity.id)\n await pdRepository.delete(entity.id)\n }\n return result.length\n }\n\n findIds = async (\n pdRepository: Repository<DcqlQueryItemEntity>,\n filter: Array<DcqlQueryItemFilter> | undefined,\n ): Promise<Array<DcqlQueryItemEntity>> => {\n const idFilters = filter?.map((f) => f.id).filter((id) => id !== undefined && id !== null)\n if (idFilters && idFilters.length > 0 && idFilters.length === filter?.length) {\n return await pdRepository.find({\n where: { id: In(idFilters) },\n })\n } else {\n return await pdRepository.find({\n ...(filter && { where: cleanFilter(filter) }), // TODO test how mixing filters work\n })\n }\n }\n}\n\nconst cleanFilter = (filter: Array<DcqlQueryItemFilter> | undefined): Array<DcqlQueryItemFilter> | undefined => {\n if (filter === undefined) {\n return undefined\n }\n\n return filter.map((item) => {\n const cleanedItem: DcqlQueryItemFilter = {}\n for (const key in item) {\n const value = item[key as keyof DcqlQueryItemFilter]\n if (value !== undefined) {\n ;(cleanedItem as any)[key] = value\n }\n }\n return cleanedItem\n })\n}\n","import type { IPresentationDefinition } from '@sphereon/pex'\nimport type { DcqlQueryItem, NonPersistedDcqlQueryItem, PartialDcqlQueryItem } from '@sphereon/ssi-sdk.data-store-types'\nimport * as blakepkg from 'blakejs'\nimport { DcqlQuery } from 'dcql'\nimport { DcqlQueryItemEntity } from '../../entities/presentationDefinition/DcqlQueryItemEntity'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const dcqlQueryItemFrom = (entity: DcqlQueryItemEntity): DcqlQueryItem => {\n const result: DcqlQueryItem = {\n id: entity.id,\n tenantId: entity.tenantId,\n queryId: entity.queryId,\n version: entity.version,\n name: entity.name,\n purpose: entity.purpose,\n query: DcqlQuery.parse(JSON.parse(entity.query)),\n createdAt: entity.createdAt,\n lastUpdatedAt: entity.lastUpdatedAt,\n }\n\n if (result.query) {\n DcqlQuery.validate(result.query)\n }\n return replaceNullWithUndefined(result)\n}\n\nexport const dcqlQueryEntityItemFrom = (item: NonPersistedDcqlQueryItem): DcqlQueryItemEntity => {\n const entity = new DcqlQueryItemEntity()\n\n entity.tenantId = item.tenantId\n entity.queryId = item.queryId!\n entity.version = item.version\n entity.name = item.name\n entity.purpose = item.purpose\n if (item.query) {\n const dcqlQuery = DcqlQuery.parse(item.query)\n DcqlQuery.validate(dcqlQuery)\n entity.query = JSON.stringify(item.query)\n }\n return entity\n}\n\nfunction hashPayload(payload: IPresentationDefinition | DcqlQuery): string {\n return blakepkg.blake2bHex(JSON.stringify(payload))\n}\n\nexport function isPresentationDefinitionEqual(base: PartialDcqlQueryItem, compare: PartialDcqlQueryItem): boolean {\n if (\n base.queryId !== compare.queryId ||\n base.tenantId !== compare.tenantId ||\n base.version !== compare.version ||\n base.name !== compare.name ||\n base.purpose !== compare.purpose\n ) {\n return false\n }\n\n if (base.query && compare.query) {\n if (hashPayload(base.query) !== hashPayload(compare.query)) {\n return false\n }\n } else if (base.query || compare.query) {\n return false\n }\n\n return true\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateContacts1659463079428 } from '../postgres/1659463079428-CreateContacts'\nimport { CreateContacts1659463069549 } from '../sqlite/1659463069549-CreateContacts'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateContacts1659463079429 implements MigrationInterface {\n name = 'CreateContacts1659463079429'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating contacts tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1659463079428 = new CreateContacts1659463079428()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1659463069549 = new CreateContacts1659463069549()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting contacts tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1659463079428 = new CreateContacts1659463079428()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1659463069549 = new CreateContacts1659463069549()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { enablePostgresUuidExtension } from '@sphereon/ssi-sdk.core'\nimport { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1659463079428 implements MigrationInterface {\n name = 'CreateContacts1659463079428'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await enablePostgresUuidExtension(queryRunner)\n await queryRunner.query(\n `CREATE TABLE \"BaseConfigEntity\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"client_id\" character varying(255), \"client_secret\" character varying(255), \"scopes\" text, \"issuer\" character varying(255), \"redirect_url\" text, \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"identifier\" character varying(255), \"session_id\" character varying(255), \"type\" character varying NOT NULL, \"connectionId\" uuid, CONSTRAINT \"REL_BaseConfig_connectionId\" UNIQUE (\"connectionId\"), CONSTRAINT \"PK_BaseConfigEntity_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfigEntity_type\" ON \"BaseConfigEntity\" (\"type\")`)\n await queryRunner.query(`CREATE TYPE \"public\".\"CorrelationIdentifier_type_enum\" AS ENUM('did', 'url')`)\n await queryRunner.query(\n `CREATE TABLE \"CorrelationIdentifier\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" \"public\".\"CorrelationIdentifier_type_enum\" NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" uuid, CONSTRAINT \"UQ_Correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"PK_CorrelationIdentifier_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Contact\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"name\" character varying(255) NOT NULL, \"alias\" character varying(255) NOT NULL, \"uri\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"UQ_Name\" UNIQUE (\"name\"), CONSTRAINT \"UQ_Contact_Alias\" UNIQUE (\"alias\"), CONSTRAINT \"PK_Contact_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"IdentityMetadata\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"label\" character varying(255) NOT NULL, \"value\" character varying(255) NOT NULL, \"identityId\" uuid, CONSTRAINT \"PK_IdentityMetadata_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Identity\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"alias\" character varying(255) NOT NULL, \"roles\" text, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"contactId\" uuid, CONSTRAINT \"UQ_Identity_Alias\" UNIQUE (\"alias\"), CONSTRAINT \"PK_Identity_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE TYPE \"public\".\"Connection_type_enum\" AS ENUM('OIDC', 'SIOPv2', 'SIOPv2+OpenID4VP')`)\n await queryRunner.query(\n `CREATE TABLE \"Connection\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" \"public\".\"Connection_type_enum\" NOT NULL, \"identityId\" uuid, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"PK_Connection_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseConfigEntity\" ADD CONSTRAINT \"FK_BaseConfig_connectionId\" FOREIGN KEY (\"connectionId\") REFERENCES \"Connection\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"CorrelationIdentifier\" ADD CONSTRAINT \"FK_CorrelationIdentifier_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"IdentityMetadata\" ADD CONSTRAINT \"FK_IdentityMetadata_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Identity\" ADD CONSTRAINT \"FK_Identity_contactId\" FOREIGN KEY (\"contactId\") REFERENCES \"Contact\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Connection\" ADD CONSTRAINT \"FK_Connection_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP CONSTRAINT \"FK_Connection_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP CONSTRAINT \"FK_Identity_contactId\"`)\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" DROP CONSTRAINT \"FK_IdentityMetadata_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP CONSTRAINT \"FK_CorrelationIdentifier_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseConfigEntity\" DROP CONSTRAINT \"FK_BaseConfig_connectionId\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Connection_type_enum\"`)\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`DROP TABLE \"IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"Contact\"`)\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"CorrelationIdentifier_type_enum\"`)\n await queryRunner.query(`DROP INDEX \"public\".\"IDX_BaseConfigEntity_type\"`)\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1659463069549 implements MigrationInterface {\n name = 'CreateContacts1659463069549'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"BaseConfigEntity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"redirect_url\" text, \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"identifier\" varchar(255), \"session_id\" varchar(255), \"type\" varchar NOT NULL, \"connectionId\" varchar, CONSTRAINT \"REL_BaseConfig_connectionId\" UNIQUE (\"connectionId\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfigEntity_type\" ON \"BaseConfigEntity\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" varchar, CONSTRAINT \"UQ_Correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Contact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"name\" varchar(255) NOT NULL, \"alias\" varchar(255) NOT NULL, \"uri\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"UQ_Name\" UNIQUE (\"name\"), CONSTRAINT \"UQ_Alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"IdentityMetadata\" (\"id\" varchar PRIMARY KEY NOT NULL, \"label\" varchar(255) NOT NULL, \"value\" varchar(255) NOT NULL, \"identityId\" varchar)`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"contactId\" varchar, CONSTRAINT \"UQ_Alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfigEntity_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseConfigEntity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"redirect_url\" text, \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"identifier\" varchar(255), \"session_id\" varchar(255), \"type\" varchar NOT NULL, \"connectionId\" varchar, CONSTRAINT \"REL_BaseConfig_connectionId\" UNIQUE (\"connectionId\"), CONSTRAINT \"FK_BaseConfig_connectionId\" FOREIGN KEY (\"connectionId\") REFERENCES \"Connection\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseConfigEntity\"(\"id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"redirect_url\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"identifier\", \"session_id\", \"type\", \"connectionId\") SELECT \"id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"redirect_url\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"identifier\", \"session_id\", \"type\", \"connectionId\" FROM \"BaseConfigEntity\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseConfigEntity\" RENAME TO \"BaseConfigEntity\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfigEntity_type\" ON \"BaseConfigEntity\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" varchar, CONSTRAINT \"UQ_Correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"FK_CorrelationIdentifier_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identityId\") SELECT \"id\", \"type\", \"correlation_id\", \"identityId\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_CorrelationIdentifier\" RENAME TO \"CorrelationIdentifier\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_IdentityMetadata\" (\"id\" varchar PRIMARY KEY NOT NULL, \"label\" varchar(255) NOT NULL, \"value\" varchar(255) NOT NULL, \"identityId\" varchar, CONSTRAINT \"FK_IdentityMetadata_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_IdentityMetadata\"(\"id\", \"label\", \"value\", \"identityId\") SELECT \"id\", \"label\", \"value\", \"identityId\" FROM \"IdentityMetadata\"`,\n )\n await queryRunner.query(`DROP TABLE \"IdentityMetadata\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_IdentityMetadata\" RENAME TO \"IdentityMetadata\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"contactId\" varchar, CONSTRAINT \"UQ_Alias\" UNIQUE (\"alias\"), CONSTRAINT \"FK_Identity_contactId\" FOREIGN KEY (\"contactId\") REFERENCES \"Contact\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\") SELECT \"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"FK_Connection_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(`INSERT INTO \"temporary_Connection\"(\"id\", \"type\", \"identityId\") SELECT \"id\", \"type\", \"identityId\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Connection\" RENAME TO \"Connection\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"Connection\" RENAME TO \"temporary_Connection\"`)\n await queryRunner.query(\n `CREATE TABLE \"Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(`INSERT INTO \"Connection\"(\"id\", \"type\", \"identityId\") SELECT \"id\", \"type\", \"identityId\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"temporary_Connection\"`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" RENAME TO \"temporary_Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"contactId\" varchar, CONSTRAINT \"UQ_Alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"Identity\"(\"id\", \"alias\", \"roles\",\"created_at\", \"last_updated_at\", \"contactId\") SELECT \"id\", \"alias\", \"roles\",\"created_at\", \"last_updated_at\", \"contactId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_Identity\"`)\n\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(\n `CREATE TABLE \"IdentityMetadata\" (\"id\" varchar PRIMARY KEY NOT NULL, \"label\" varchar(255) NOT NULL, \"value\" varchar(255) NOT NULL, \"identityId\" varchar)`,\n )\n await queryRunner.query(\n `INSERT INTO \"IdentityMetadata\"(\"id\", \"label\", \"value\", \"identityId\") SELECT \"id\", \"label\", \"value\", \"identityId\" FROM \"IdentityMetadata\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" RENAME TO \"temporary_CorrelationIdentifier\"`)\n await queryRunner.query(\n `CREATE TABLE \"CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" varchar, CONSTRAINT \"UQ_Correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identityId\") SELECT \"id\", \"type\", \"correlation_id\", \"identityId\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_CorrelationIdentifier\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`DROP TABLE \"IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"Contact\"`)\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfigEntity_type\"`)\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreatePresentationDefinitions1716475165345 } from '../postgres/1716475165345-CreatePresentationDefinitions'\nimport { CreatePresentationDefinitions1716475165344 } from '../sqlite/1716475165344-CreatePresentationDefinitions'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreatePresentationDefinitions1716533767523 implements MigrationInterface {\n name = 'CreatePresentationDefinitionItems1716533767523'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreatePresentationDefinitions1716475165345 = new CreatePresentationDefinitions1716475165345()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreatePresentationDefinitions1716475165344 = new CreatePresentationDefinitions1716475165344()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreatePresentationDefinitions1716475165345 = new CreatePresentationDefinitions1716475165345()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreatePresentationDefinitions1716475165344 = new CreatePresentationDefinitions1716475165344()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreatePresentationDefinitions1716475165345 implements MigrationInterface {\n name = 'CreatePresentationDefinitions1716475165345'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\nCREATE TABLE \"PresentationDefinitionItem\" (\n \"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \n \"tenant_id\" TEXT, \n \"definition_id\" TEXT NOT NULL,\n \"name\" TEXT,\n \"version\" TEXT NOT NULL, \n \"purpose\" TEXT, \n \"definition_payload\" TEXT NOT NULL, \n \"query\" TEXT, \n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \n \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \n CONSTRAINT \"PK_PresentationDefinitionItem_id\" PRIMARY KEY (\"id\"))\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"PresentationDefinitionItem\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreatePresentationDefinitions1716475165344 implements MigrationInterface {\n name = 'CreatePresentationDefinitions1716475165344'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"PresentationDefinitionItem\" (\n \"id\" varchar PRIMARY KEY NOT NULL, \n \"tenant_id\" varchar,\n \"definition_id\" varchar NOT NULL,\n \"name\" varchar,\n \"version\" varchar NOT NULL,\n \"purpose\" varchar,\n \"definition_payload\" varchar NOT NULL,\n \"query\" varchar,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"PresentationDefinitionItem\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateIssuanceBranding1685628974232 } from '../postgres/1685628974232-CreateIssuanceBranding'\nimport { FixCredentialClaimsReferencesUuidPG1741895822987 } from '../postgres/1741895822987-FixCredentialClaimsReferencesUuid'\nimport { CreateIssuanceBranding1685628973231 } from '../sqlite/1685628973231-CreateIssuanceBranding'\nimport { FixCredentialClaimsReferencesUuidSqlite1741895822987 } from '../sqlite/1741895822987-FixCredentialClaimsReferencesUuid'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class FixCredentialClaimsReferencesUuid1741895822987 implements MigrationInterface {\n name = 'FixCredentialClaimsReferenceUuid1741895822987'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating issuance branding uuid problem')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: FixCredentialClaimsReferencesUuidPG1741895822987 = new FixCredentialClaimsReferencesUuidPG1741895822987()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: FixCredentialClaimsReferencesUuidSqlite1741895822987 = new FixCredentialClaimsReferencesUuidSqlite1741895822987()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting issuance branding uuid migration')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateIssuanceBranding1685628974232 = new CreateIssuanceBranding1685628974232()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateIssuanceBranding1685628973231 = new CreateIssuanceBranding1685628973231()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { enablePostgresUuidExtension } from '@sphereon/ssi-sdk.core'\nimport { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateIssuanceBranding1685628974232 implements MigrationInterface {\n name = 'CreateIssuanceBranding1685628974232'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await enablePostgresUuidExtension(queryRunner)\n await queryRunner.query(\n `CREATE TABLE \"ImageDimensions\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"width\" integer NOT NULL, \"height\" integer NOT NULL, CONSTRAINT \"PK_ImageDimensions_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"ImageAttributes\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"uri\" character varying, \"dataUri\" character varying, \"mediaType\" character varying(255), \"alt\" character varying(255), \"dimensionsId\" uuid, CONSTRAINT \"UQ_dimensionsId\" UNIQUE (\"dimensionsId\"), CONSTRAINT \"PK_ImageAttributes_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BackgroundAttributes\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"color\" character varying(255), \"imageId\" uuid, CONSTRAINT \"UQ_imageId\" UNIQUE (\"imageId\"), CONSTRAINT \"PK_BackgroundAttributes_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"TextAttributes\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"color\" character varying(255), CONSTRAINT \"PK_TextAttributes_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BaseLocaleBranding\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"alias\" character varying(255), \"locale\" character varying(255) NOT NULL, \"description\" character varying(255), \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"credentialBrandingId\" uuid, \"issuerBrandingId\" uuid, \"type\" character varying NOT NULL, \"logoId\" uuid, \"backgroundId\" uuid, \"textId\" uuid, \"client_uri\" character varying, \"tos_uri\" character varying, \"policy_uri\" character varying, \"contacts\" character varying, CONSTRAINT \"UQ_logoId\" UNIQUE (\"logoId\"), CONSTRAINT \"UQ_backgroundId\" UNIQUE (\"backgroundId\"), CONSTRAINT \"UQ_textId\" UNIQUE (\"textId\"), CONSTRAINT \"PK_BaseLocaleBranding_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\" ON \"BaseLocaleBranding\" (\"credentialBrandingId\", \"locale\")`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\" ON \"BaseLocaleBranding\" (\"issuerBrandingId\", \"locale\")`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseLocaleBranding_type\" ON \"BaseLocaleBranding\" (\"type\")`)\n\n await queryRunner.query(\n `CREATE TABLE \"CredentialClaims\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"key\" character varying(255) NOT NULL, \"name\" character varying(255) NOT NULL, \"credentialLocaleBrandingId\" character varying, CONSTRAINT \"PK_CredentialClaims_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\" ON \"CredentialClaims\" (\"credentialLocaleBrandingId\", \"key\")`,\n )\n\n await queryRunner.query(\n `CREATE TABLE \"CredentialBranding\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"vcHash\" character varying(255) NOT NULL, \"issuerCorrelationId\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"UQ_vcHash\" UNIQUE (\"vcHash\"), CONSTRAINT \"PK_CredentialBranding_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_CredentialBrandingEntity_issuerCorrelationId\" ON \"CredentialBranding\" (\"issuerCorrelationId\")`)\n await queryRunner.query(`CREATE INDEX \"IDX_CredentialBrandingEntity_vcHash\" ON \"CredentialBranding\" (\"vcHash\")`)\n await queryRunner.query(\n `CREATE TABLE \"IssuerBranding\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"issuerCorrelationId\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"UQ_issuerCorrelationId\" UNIQUE (\"issuerCorrelationId\"), CONSTRAINT \"PK_IssuerBranding_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_IssuerBrandingEntity_issuerCorrelationId\" ON \"IssuerBranding\" (\"issuerCorrelationId\")`)\n await queryRunner.query(\n `ALTER TABLE \"ImageAttributes\" ADD CONSTRAINT \"FK_ImageAttributes_dimensionsId\" FOREIGN KEY (\"dimensionsId\") REFERENCES \"ImageDimensions\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BackgroundAttributes\" ADD CONSTRAINT \"FK_BackgroundAttributes_imageId\" FOREIGN KEY (\"imageId\") REFERENCES \"ImageAttributes\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_logoId\" FOREIGN KEY (\"logoId\") REFERENCES \"ImageAttributes\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_backgroundId\" FOREIGN KEY (\"backgroundId\") REFERENCES \"BackgroundAttributes\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_textId\" FOREIGN KEY (\"textId\") REFERENCES \"TextAttributes\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_credentialBrandingId\" FOREIGN KEY (\"credentialBrandingId\") REFERENCES \"CredentialBranding\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_issuerBrandingId\" FOREIGN KEY (\"issuerBrandingId\") REFERENCES \"IssuerBranding\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_issuerBrandingId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_credentialBrandingId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_textId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_backgroundId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_logoId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BackgroundAttributes_imageId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_ImageAttributes_dimensionsId\"`)\n await queryRunner.query(`ALTER TABLE \"IssuerBranding\" DROP INDEX \"IDX_IssuerBrandingEntity_issuerCorrelationId\"`)\n await queryRunner.query(`DROP TABLE \"IssuerBranding\"`)\n await queryRunner.query(`ALTER TABLE \"CredentialBranding\" DROP INDEX \"IDX_CredentialBrandingEntity_vcHash\"`)\n await queryRunner.query(`ALTER TABLE \"CredentialBranding\" DROP INDEX \"IDX_CredentialBrandingEntity_issuerCorrelationId\"`)\n await queryRunner.query(`DROP TABLE \"CredentialBranding\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP INDEX \"IDX_BaseLocaleBranding_type\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\"`)\n await queryRunner.query(`ALTER TABLE \"CredentialClaims\" DROP INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\"`)\n await queryRunner.query(`DROP TABLE \"CredentialClaims\"`)\n await queryRunner.query(`DROP TABLE \"BaseLocaleBranding\"`)\n await queryRunner.query(`DROP TABLE \"TextAttributes\"`)\n await queryRunner.query(`DROP TABLE \"BackgroundAttributes\"`)\n await queryRunner.query(`DROP TABLE \"ImageAttributes\"`)\n await queryRunner.query(`DROP TABLE \"ImageDimensions\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class FixCredentialClaimsReferencesUuidPG1741895822987 implements MigrationInterface {\n name = 'FixCredentialClaimsReferencesUuid1741895822987'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Migrate varchar to uuid\n await queryRunner.query(`\n ALTER TABLE \"CredentialClaims\"\n ALTER COLUMN \"credentialLocaleBrandingId\" TYPE uuid USING \"credentialLocaleBrandingId\"::uuid;\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Migrate uuid back to varchar\n await queryRunner.query(`\n ALTER TABLE \"CredentialClaims\"\n ALTER COLUMN \"credentialLocaleBrandingId\" TYPE character varying USING \"credentialLocaleBrandingId\"::text;\n `)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateIssuanceBranding1685628973231 implements MigrationInterface {\n name = 'CreateIssuanceBranding1685628973231'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`CREATE TABLE \"ImageDimensions\" (\"id\" varchar PRIMARY KEY NOT NULL, \"width\" integer NOT NULL, \"height\" integer NOT NULL)`)\n await queryRunner.query(\n `CREATE TABLE \"ImageAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar, \"dataUri\" varchar, \"mediaType\" varchar(255), \"alt\" varchar(255), \"dimensionsId\" varchar, CONSTRAINT \"UQ_dimensionsId\" UNIQUE (\"dimensionsId\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BackgroundAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"color\" varchar(255), \"imageId\" varchar, CONSTRAINT \"UQ_imageId\" UNIQUE (\"imageId\"))`,\n )\n await queryRunner.query(`CREATE TABLE \"TextAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"color\" varchar(255))`)\n await queryRunner.query(\n `CREATE TABLE \"BaseLocaleBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255), \"locale\" varchar(255) NOT NULL, \"description\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"credentialBrandingId\" varchar, \"issuerBrandingId\" varchar, \"type\" varchar NOT NULL, \"logoId\" varchar, \"backgroundId\" varchar, \"textId\" varchar, \"client_uri\" varchar, \"tos_uri\" varchar, \"policy_uri\" varchar, \"contacts\" varchar, CONSTRAINT \"UQ_logoId\" UNIQUE (\"logoId\"), CONSTRAINT \"UQ_backgroundId\" UNIQUE (\"backgroundId\"), CONSTRAINT \"UQ_textId\" UNIQUE (\"textId\"))`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\" ON \"BaseLocaleBranding\" (\"credentialBrandingId\", \"locale\")`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\" ON \"BaseLocaleBranding\" (\"issuerBrandingId\", \"locale\")`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseLocaleBranding_type\" ON \"BaseLocaleBranding\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"CredentialClaims\" (\"id\" varchar PRIMARY KEY NOT NULL, \"key\" varchar(255) NOT NULL, \"name\" varchar(255) NOT NULL, \"credentialLocaleBrandingId\" varchar)`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\" ON \"CredentialClaims\" (\"credentialLocaleBrandingId\", \"key\")`,\n )\n await queryRunner.query(\n `CREATE TABLE \"CredentialBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"vcHash\" varchar(255) NOT NULL, \"issuerCorrelationId\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"UQ_vcHash\" UNIQUE (\"vcHash\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_CredentialBrandingEntity_issuerCorrelationId\" ON \"CredentialBranding\" (\"issuerCorrelationId\")`)\n await queryRunner.query(`CREATE INDEX \"IDX_CredentialBrandingEntity_vcHash\" ON \"CredentialBranding\" (\"vcHash\")`)\n await queryRunner.query(\n `CREATE TABLE \"IssuerBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"issuerCorrelationId\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"UQ_issuerCorrelationId\" UNIQUE (\"issuerCorrelationId\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_IssuerBrandingEntity_issuerCorrelationId\" ON \"IssuerBranding\" (\"issuerCorrelationId\")`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_ImageAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar, \"dataUri\" varchar, \"mediaType\" varchar(255), \"alt\" varchar(255), \"dimensionsId\" varchar, CONSTRAINT \"UQ_dimensionsId\" UNIQUE (\"dimensionsId\"), CONSTRAINT \"FK_ImageAttributes_dimensionsId\" FOREIGN KEY (\"dimensionsId\") REFERENCES \"ImageDimensions\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_ImageAttributes\"(\"id\", \"uri\", \"dataUri\", \"mediaType\", \"alt\", \"dimensionsId\") SELECT \"id\", \"uri\", \"dataUri\", \"mediaType\", \"alt\", \"dimensionsId\" FROM \"ImageAttributes\"`,\n )\n await queryRunner.query(`DROP TABLE \"ImageAttributes\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_ImageAttributes\" RENAME TO \"ImageAttributes\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BackgroundAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"color\" varchar(255), \"imageId\" varchar, CONSTRAINT \"UQ_imageId\" UNIQUE (\"imageId\"), CONSTRAINT \"FK_BackgroundAttributes_imageId\" FOREIGN KEY (\"imageId\") REFERENCES \"ImageAttributes\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BackgroundAttributes\"(\"id\", \"color\", \"imageId\") SELECT \"id\", \"color\", \"imageId\" FROM \"BackgroundAttributes\"`,\n )\n await queryRunner.query(`DROP TABLE \"BackgroundAttributes\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BackgroundAttributes\" RENAME TO \"BackgroundAttributes\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\"`)\n await queryRunner.query(`DROP INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseLocaleBranding_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseLocaleBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255), \"locale\" varchar(255) NOT NULL, \"description\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"credentialBrandingId\" varchar, \"issuerBrandingId\" varchar, \"type\" varchar NOT NULL, \"logoId\" varchar, \"backgroundId\" varchar, \"textId\" varchar, \"client_uri\" varchar, \"tos_uri\" varchar, \"policy_uri\" varchar, \"contacts\" varchar, CONSTRAINT \"UQ_logoId\" UNIQUE (\"logoId\"), CONSTRAINT \"UQ_backgroundId\" UNIQUE (\"backgroundId\"), CONSTRAINT \"UQ_textId\" UNIQUE (\"textId\"), CONSTRAINT \"FK_BaseLocaleBranding_logoId\" FOREIGN KEY (\"logoId\") REFERENCES \"ImageAttributes\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_BaseLocaleBranding_backgroundId\" FOREIGN KEY (\"backgroundId\") REFERENCES \"BackgroundAttributes\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_BaseLocaleBranding_textId\" FOREIGN KEY (\"textId\") REFERENCES \"TextAttributes\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_BaseLocaleBranding_credentialBrandingId\" FOREIGN KEY (\"credentialBrandingId\") REFERENCES \"CredentialBranding\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_BaseLocaleBranding_issuerBrandingId\" FOREIGN KEY (\"issuerBrandingId\") REFERENCES \"IssuerBranding\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseLocaleBranding\"(\"id\", \"alias\", \"locale\", \"description\", \"created_at\", \"last_updated_at\", \"credentialBrandingId\", \"issuerBrandingId\", \"type\", \"logoId\", \"backgroundId\", \"textId\") SELECT \"id\", \"alias\", \"locale\", \"description\", \"created_at\", \"last_updated_at\", \"credentialBrandingId\", \"issuerBrandingId\", \"type\", \"logoId\", \"backgroundId\", \"textId\" FROM \"BaseLocaleBranding\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseLocaleBranding\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseLocaleBranding\" RENAME TO \"BaseLocaleBranding\"`)\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\" ON \"BaseLocaleBranding\" (\"credentialBrandingId\", \"locale\")`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\" ON \"BaseLocaleBranding\" (\"issuerBrandingId\", \"locale\")`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseLocaleBranding_type\" ON \"BaseLocaleBranding\" (\"type\")`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP INDEX \"IDX_BaseLocaleBranding_type\"`)\n await queryRunner.query(`DROP INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" RENAME TO \"temporary_BaseLocaleBranding\"`)\n await queryRunner.query(\n `CREATE TABLE \"BaseLocaleBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255), \"locale\" varchar(255) NOT NULL, \"description\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"credentialBrandingId\" varchar, \"issuerBrandingId\" varchar, \"type\" varchar NOT NULL, \"logoId\" varchar, \"backgroundId\" varchar, \"textId\" varchar, \"client_uri\" varchar, \"tos_uri\" varchar, \"policy_uri\" varchar, \"contacts\" varchar, CONSTRAINT \"UQ_logoId\" UNIQUE (\"logoId\"), CONSTRAINT \"UQ_backgroundId\" UNIQUE (\"backgroundId\"), CONSTRAINT \"UQ_textId\" UNIQUE (\"textId\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"BaseLocaleBranding\"(\"id\", \"alias\", \"locale\", \"description\", \"created_at\", \"last_updated_at\", \"credentialBrandingId\", \"issuerBrandingId\", \"type\", \"logoId\", \"backgroundId\", \"textId\") SELECT \"id\", \"alias\", \"locale\", \"description\", \"created_at\", \"last_updated_at\", \"credentialBrandingId\", \"issuerBrandingId\", \"type\", \"logoId\", \"backgroundId\", \"textId\" FROM \"BaseLocaleBranding\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_BaseLocaleBranding\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseLocaleBranding_type\" ON \"BaseLocaleBranding\" (\"type\")`)\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\" ON \"BaseLocaleBranding\" (\"issuerBrandingId\", \"locale\")`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\" ON \"BaseLocaleBranding\" (\"credentialBrandingId\", \"locale\")`,\n )\n await queryRunner.query(`ALTER TABLE \"BackgroundAttributes\" RENAME TO \"temporary_BackgroundAttributes\"`)\n await queryRunner.query(\n `CREATE TABLE \"BackgroundAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"color\" varchar(255), \"imageId\" varchar, CONSTRAINT \"UQ_imageId\" UNIQUE (\"imageId\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"BackgroundAttributes\"(\"id\", \"color\", \"imageId\") SELECT \"id\", \"color\", \"imageId\" FROM \"BackgroundAttributes\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_BackgroundAttributes\"`)\n await queryRunner.query(`ALTER TABLE \"ImageAttributes\" RENAME TO \"temporary_ImageAttributes\"`)\n await queryRunner.query(\n `CREATE TABLE \"ImageAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar, \"dataUri\" varchar, \"mediaType\" varchar(255), \"alt\" varchar(255), \"dimensionsId\" varchar, CONSTRAINT \"UQ_dimensionsId\" UNIQUE (\"dimensionsId\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"ImageAttributes\"(\"id\", \"uri\", \"dataUri\", \"mediaType\", \"alt\", \"dimensionsId\") SELECT \"id\", \"uri\", \"dataUri\", \"mediaType\", \"alt\", \"dimensionsId\" FROM \"ImageAttributes\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_ImageAttributes\"`)\n await queryRunner.query(`DROP INDEX \"IDX_IssuerBrandingEntity_issuerCorrelationId\"`)\n await queryRunner.query(`DROP TABLE \"IssuerBranding\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialBrandingEntity_vcHash\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialBrandingEntity_issuerCorrelationId\"`)\n await queryRunner.query(`DROP TABLE \"CredentialBranding\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseLocaleBranding_type\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\"`)\n await queryRunner.query(`DROP TABLE \"CredentialClaims\"`)\n await queryRunner.query(`DROP INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\"`)\n await queryRunner.query(`DROP TABLE \"BaseLocaleBranding\"`)\n await queryRunner.query(`DROP TABLE \"TextAttributes\"`)\n await queryRunner.query(`DROP TABLE \"BackgroundAttributes\"`)\n await queryRunner.query(`DROP TABLE \"ImageAttributes\"`)\n await queryRunner.query(`DROP TABLE \"ImageDimensions\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class FixCredentialClaimsReferencesUuidSqlite1741895822987 implements MigrationInterface {\n name = 'FixCredentialClaimsReferencesUuid1741895822987'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Create a new table with the updated column type (uuid)\n await queryRunner.query(`\n CREATE TABLE \"CredentialClaims_new\"\n (\n \"id\" uuid NOT NULL DEFAULT (lower(hex(randomblob(16)))),\n \"key\" character varying(255) NOT NULL,\n \"name\" character varying(255) NOT NULL,\n \"credentialLocaleBrandingId\" uuid,\n CONSTRAINT \"PK_CredentialClaims_id\" PRIMARY KEY (\"id\")\n )\n `)\n\n // Copy data from the old table\n await queryRunner.query(`\n INSERT INTO \"CredentialClaims_new\" (\"id\", \"key\", \"name\", \"credentialLocaleBrandingId\")\n SELECT \"id\", \"key\", \"name\", \"credentialLocaleBrandingId\"\n FROM \"CredentialClaims\"\n `)\n\n // Drop the old table\n await queryRunner.query(`DROP TABLE \"CredentialClaims\"`)\n\n // Rename the new table to the original name\n await queryRunner.query(`ALTER TABLE \"CredentialClaims_new\" RENAME TO \"CredentialClaims\"`)\n\n // Recreate the unique index\n await queryRunner.query(`\n CREATE UNIQUE INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\"\n ON \"CredentialClaims\" (\"credentialLocaleBrandingId\", \"key\")\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Migrate uuid back to varchar\n\n // Create a new table reverting the column back to character varying\n await queryRunner.query(`\n CREATE TABLE \"CredentialClaims_old\"\n (\n \"id\" uuid NOT NULL DEFAULT (lower(hex(randomblob(16)))),\n \"key\" character varying(255) NOT NULL,\n \"name\" character varying(255) NOT NULL,\n \"credentialLocaleBrandingId\" character varying,\n CONSTRAINT \"PK_CredentialClaims_id\" PRIMARY KEY (\"id\")\n )\n `)\n\n // Copy data from the current table\n await queryRunner.query(`\n INSERT INTO \"CredentialClaims_old\" (\"id\", \"key\", \"name\", \"credentialLocaleBrandingId\")\n SELECT \"id\", \"key\", \"name\", \"credentialLocaleBrandingId\"\n FROM \"CredentialClaims\"\n `)\n\n // Drop the current table\n await queryRunner.query(`DROP TABLE \"CredentialClaims\"`)\n\n // Rename the new table back to the original name\n await queryRunner.query(`ALTER TABLE \"CredentialClaims_old\" RENAME TO \"CredentialClaims\"`)\n\n // Recreate the unique index\n await queryRunner.query(`\n CREATE UNIQUE INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\"\n ON \"CredentialClaims\" (\"credentialLocaleBrandingId\", \"key\")\n `)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\n\nimport {\n AddBitstringStatusListEnumPG1741895823000,\n CreateBitstringStatusListPG1741895823000,\n} from '../postgres/1741895823000-CreateBitstringStatusList'\nimport { CreateBitstringStatusListSqlite1741895823001 } from '../sqlite/1741895823001-CreateBitstringStatusList'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class AddBitstringStatusListEnum1741895823000 implements MigrationInterface {\n name = 'AddBitstringStatusListEnum1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating bitstring status list tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n const mig = new AddBitstringStatusListEnumPG1741895823000()\n await mig.up(queryRunner)\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n return\n }\n default:\n return Promise.reject(`Migrations only supported for sqlite and postgres. Was ${dbType}`)\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async down(queryRunner: QueryRunner): Promise<void> {}\n}\n\nexport class CreateBitstringStatusList1741895823000 implements MigrationInterface {\n name = 'CreateBitstringStatusList1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating bitstring status list tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n const mig = new CreateBitstringStatusListPG1741895823000()\n await mig.up(queryRunner)\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n const mig = new CreateBitstringStatusListSqlite1741895823001()\n await mig.up(queryRunner)\n return\n }\n default:\n return Promise.reject(`Migrations only supported for sqlite and postgres. Was ${dbType}`)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: dropping bitstring status list tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n const mig = new CreateBitstringStatusListPG1741895823000()\n await mig.down(queryRunner)\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n const mig = new CreateBitstringStatusListSqlite1741895823001()\n await mig.down(queryRunner)\n return\n }\n default:\n return Promise.reject(`Migrations only supported for sqlite and postgres. Was ${dbType}`)\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class AddBitstringStatusListEnumPG1741895823000 implements MigrationInterface {\n name = 'AddBitstringStatusListEnum1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.startTransaction()\n await queryRunner.query(`ALTER TYPE \"StatusList_type_enum\" ADD VALUE 'BitstringStatusList'`)\n await queryRunner.commitTransaction()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Note: Cannot remove enum value in Postgres without recreating the type\n }\n}\n\nexport class CreateBitstringStatusListPG1741895823000 implements MigrationInterface {\n name = 'CreateBitstringStatusList1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Add BitstringStatusList columns to StatusList table\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD COLUMN \"ttl\" integer`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD COLUMN \"validFrom\" TIMESTAMP`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD COLUMN \"validUntil\" TIMESTAMP`)\n\n // Update type enum constraint to include BitstringStatusList\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP CONSTRAINT IF EXISTS \"CHK_StatusList_type\"`)\n await queryRunner.query(\n `ALTER TABLE \"StatusList\" ADD CONSTRAINT \"CHK_StatusList_type\" CHECK (\"type\" IN ('StatusList2021', 'OAuthStatusList', 'BitstringStatusList'))`,\n )\n\n // Add inheritance discriminator column to StatusListEntry table\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"type\" character varying NOT NULL DEFAULT 'StatusListEntryEntity'`)\n\n // Add BitstringStatusListEntry specific columns to StatusListEntry table\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"statusPurpose\" character varying`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"bitsPerStatus\" integer DEFAULT 1`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"statusMessage\" text`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"statusReference\" text`)\n\n // Add constraint for entry type\n await queryRunner.query(\n `ALTER TABLE \"StatusListEntry\" ADD CONSTRAINT \"CHK_StatusListEntry_type\" CHECK (\"type\" IN ('StatusListEntryEntity', 'bitstring'))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Remove entry type constraint and columns\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP CONSTRAINT \"CHK_StatusListEntry_type\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"statusReference\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"statusMessage\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"bitsPerStatus\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"statusPurpose\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"type\"`)\n\n // Revert StatusList type constraint\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP CONSTRAINT \"CHK_StatusList_type\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD CONSTRAINT \"CHK_StatusList_type\" CHECK (\"type\" IN ('StatusList2021', 'OAuthStatusList'))`)\n\n // Remove BitstringStatusList columns from StatusList table\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"validUntil\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"validFrom\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"ttl\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"bitsPerStatus\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateBitstringStatusListSqlite1741895823001 implements MigrationInterface {\n name = 'CreateBitstringStatusList1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Update StatusList table to include BitstringStatusList type and columns\n await queryRunner.query(`\n CREATE TABLE \"temporary_StatusList\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK( \"type\" IN ('StatusList2021', 'OAuthStatusList', 'BitstringStatusList') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK( \"driverType\" IN ('agent_typeorm','agent_kv_store','github','agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK( \"credentialIdMode\" IN ('ISSUANCE','PERSISTENCE','NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK( \"proofFormat\" IN ('lds','jwt', 'vc+jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK( \"indexingDirection\" IN ('rightToLeft') ),\n \"statusPurpose\" varchar,\n \"statusListCredential\" text,\n \"expiresAt\" datetime,\n \"bitsPerStatus\" integer DEFAULT (1),\n \"ttl\" integer,\n \"validFrom\" datetime,\n \"validUntil\" datetime,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )\n `)\n\n await queryRunner.query(`\n INSERT INTO \"temporary_StatusList\"(\n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\", \"bitsPerStatus\", \"expiresAt\"\n )\n SELECT \n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\", \"bitsPerStatus\", \"expiresAt\"\n FROM \"StatusList\"\n `)\n\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusList\" RENAME TO \"StatusList\"`)\n\n // Update StatusListEntry table with inheritance and bitstring columns\n await queryRunner.query(`\n CREATE TABLE \"temporary_StatusListEntry\" (\n \"statusListId\" varchar NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" text,\n \"credentialHash\" varchar(128),\n \"correlationId\" varchar(255),\n \"value\" varchar(50),\n \"type\" varchar CHECK( \"type\" IN ('StatusListEntryEntity', 'bitstring') ) NOT NULL DEFAULT ('StatusListEntryEntity'),\n \"statusPurpose\" varchar,\n \"bitsPerStatus\" integer DEFAULT (1),\n \"statusMessage\" text,\n \"statusReference\" text,\n PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )\n `)\n\n await queryRunner.query(`\n INSERT INTO \"temporary_StatusListEntry\"(\n \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\", \n \"correlationId\", \"value\", \"type\"\n )\n SELECT \n \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\",\n \"correlationId\", \"value\", 'StatusListEntryEntity'\n FROM \"StatusListEntry\"\n `)\n\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusListEntry\" RENAME TO \"StatusListEntry\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Revert StatusListEntry table changes\n await queryRunner.query(`\n CREATE TABLE \"temporary_StatusListEntry\" (\n \"statusListId\" varchar NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" text,\n \"credentialHash\" varchar(128),\n \"correlationId\" varchar(255),\n \"value\" varchar(50),\n PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )\n `)\n\n await queryRunner.query(`\n INSERT INTO \"temporary_StatusListEntry\"(\n \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\",\n \"correlationId\", \"value\"\n )\n SELECT \n \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\",\n \"correlationId\", \"value\"\n FROM \"StatusListEntry\"\n WHERE \"type\" = 'StatusListEntryEntity'\n `)\n\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusListEntry\" RENAME TO \"StatusListEntry\"`)\n\n // Revert StatusList table changes\n await queryRunner.query(`\n CREATE TABLE \"temporary_StatusList\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK( \"type\" IN ('StatusList2021', 'OAuthStatusList') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK( \"driverType\" IN ('agent_typeorm','agent_kv_store','github','agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK( \"credentialIdMode\" IN ('ISSUANCE','PERSISTENCE','NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK( \"proofFormat\" IN ('lds','jwt', 'vc+jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK( \"indexingDirection\" IN ('rightToLeft') ),\n \"statusPurpose\" varchar,\n \"statusListCredential\" text,\n \"bitsPerStatus\" integer,\n \"expiresAt\" datetime,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )\n `)\n\n await queryRunner.query(`\n INSERT INTO \"temporary_StatusList\"(\n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\", \"bitsPerStatus\", \"expiresAt\"\n )\n SELECT \n \"id\", \"correlationId\", \"length\", \"issuer\", \n CASE WHEN \"type\" = 'BitstringStatusList' THEN 'StatusList2021' ELSE \"type\" END,\n \"driverType\", \"credentialIdMode\", \"proofFormat\", \"indexingDirection\",\n \"statusPurpose\", \"statusListCredential\", \"bitsPerStatus\", \"expiresAt\"\n FROM \"StatusList\"\n `)\n\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusList\" RENAME TO \"StatusList\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { CreateDcqlQueryItemPG1726588800000 } from '../postgres/1726588800000-CreateDcqlQueryItem'\nimport { CreateDcqlQueryItemSQlite1726617600000 } from '../sqlite/1726617600000-CreateDcqlQueryItem'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateDcqlQueryItem1726617600000 implements MigrationInterface {\n name = 'CreateDcqlQueryItem1726617600000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: updating presentation definition item nullable fields')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateDcqlQueryItemPG1726588800000 = new CreateDcqlQueryItemPG1726588800000()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateDcqlQueryItemSQlite1726617600000 = new CreateDcqlQueryItemSQlite1726617600000()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting presentation definition item nullable fields')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateDcqlQueryItemPG1726588800000 = new CreateDcqlQueryItemPG1726588800000()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateDcqlQueryItemSQlite1726617600000 = new CreateDcqlQueryItemSQlite1726617600000()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateDcqlQueryItemPG1726588800000 implements MigrationInterface {\n name = 'CreateDcqlQueryItemPG1726588800000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"DcqlQueryItem\" (\n \"id\" uuid NOT NULL DEFAULT uuid_generate_v4(),\n \"tenant_id\" TEXT,\n \"query_id\" TEXT NOT NULL,\n \"name\" TEXT,\n \"version\" TEXT NOT NULL,\n \"purpose\" TEXT,\n \"query\" TEXT NOT NULL,\n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(),\n CONSTRAINT \"PK_DcqlQueryItem_id\" PRIMARY KEY (\"id\"))\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"DcqlQueryItem\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateDcqlQueryItemSQlite1726617600000 implements MigrationInterface {\n name = 'CreateDcqlQueryItemSQlite1726617600000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"DcqlQueryItem\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"tenant_id\" varchar,\n \"query_id\" varchar NOT NULL,\n \"name\" varchar,\n \"version\" varchar NOT NULL,\n \"purpose\" varchar,\n \"query\" varchar NOT NULL,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"DcqlQueryItem\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateIssuanceBranding1685628974232 } from '../postgres/1685628974232-CreateIssuanceBranding'\nimport { CreateIssuanceBranding1685628973231 } from '../sqlite/1685628973231-CreateIssuanceBranding'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateIssuanceBranding1659463079429 implements MigrationInterface {\n name = 'CreateIssuanceBranding1659463079429'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating issuance branding tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateIssuanceBranding1685628974232 = new CreateIssuanceBranding1685628974232()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateIssuanceBranding1685628973231 = new CreateIssuanceBranding1685628973231()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting issuance branding tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateIssuanceBranding1685628974232 = new CreateIssuanceBranding1685628974232()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateIssuanceBranding1685628973231 = new CreateIssuanceBranding1685628973231()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateContacts1690925872592 } from '../postgres/1690925872592-CreateContacts'\nimport { CreateContacts1690925872693 } from '../sqlite/1690925872693-CreateContacts'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateContacts1690925872318 implements MigrationInterface {\n name = 'CreateContacts1690925872318'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating contacts tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1690925872592 = new CreateContacts1690925872592()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1690925872693 = new CreateContacts1690925872693()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting contacts tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1690925872592 = new CreateContacts1690925872592()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1690925872693 = new CreateContacts1690925872693()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { enablePostgresUuidExtension } from '@sphereon/ssi-sdk.core'\nimport { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1690925872592 implements MigrationInterface {\n name = 'CreateContacts1690925872592'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await enablePostgresUuidExtension(queryRunner)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP CONSTRAINT \"FK_CorrelationIdentifier_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" DROP CONSTRAINT \"FK_IdentityMetadata_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP CONSTRAINT \"FK_Identity_contactId\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP CONSTRAINT \"FK_Connection_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" RENAME COLUMN \"identityId\" TO \"identity_id\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" RENAME COLUMN \"identityId\" TO \"identity_id\"`)\n await queryRunner.query(`CREATE TYPE \"public\".\"PartyType_type_enum\" AS ENUM('naturalPerson', 'organization')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"PartyOrigin_type_enum\" AS ENUM('INTERNAL', 'EXTERNAL')`)\n await queryRunner.query(\n `CREATE TABLE \"PartyType\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" \"public\".\"PartyType_type_enum\" NOT NULL, \"origin\" \"public\".\"PartyOrigin_type_enum\" NOT NULL, \"name\" character varying(255) NOT NULL, \"description\" character varying(255), \"tenant_id\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"UQ_PartyType_name\" UNIQUE (\"name\"), CONSTRAINT \"PK_PartyType_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyType_type_tenant_id\" ON \"PartyType\" (\"type\", \"tenant_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"BaseContact\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"legal_name\" character varying(255), \"display_name\" character varying(255), \"first_name\" character varying(255), \"middle_name\" character varying(255), \"last_name\" character varying(255), \"type\" character varying NOT NULL, \"party_id\" uuid, CONSTRAINT \"UQ_BaseContact_legal_name\" UNIQUE (\"legal_name\"), CONSTRAINT \"REL_BaseContact_party_id\" UNIQUE (\"party_id\"), CONSTRAINT \"PK_BaseContact_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseContact_type\" ON \"BaseContact\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"PartyRelationship\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"left_id\" uuid NOT NULL, \"right_id\" uuid NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"PK_PartyRelationship_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyRelationship_left_right\" ON \"PartyRelationship\" (\"left_id\", \"right_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"ElectronicAddress\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" character varying(255) NOT NULL, \"electronic_address\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"partyId\" uuid, CONSTRAINT \"PK_ElectronicAddress_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"PhysicalAddress\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" character varying(255) NOT NULL, \"street_name\" character varying(255) NOT NULL, \"street_number\" character varying(255) NOT NULL, \"postal_code\" character varying(255) NOT NULL, \"city_name\" character varying(255) NOT NULL, \"province_name\" character varying(255) NOT NULL, \"country_code\" character varying(2) NOT NULL, \"building_name\" character varying(255), \"partyId\" uuid, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"PK_PhysicalAddress_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Party\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"uri\" character varying(255), \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"party_type_id\" uuid NOT NULL, CONSTRAINT \"PK_Party_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BaseConfig\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"identifier\" character varying(255), \"redirect_url\" character varying(255), \"session_id\" character varying(255), \"client_id\" character varying(255), \"client_secret\" character varying(255), \"scopes\" text, \"issuer\" character varying(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" character varying NOT NULL, \"connection_id\" uuid, CONSTRAINT \"REL_BaseConfig_connection_id\" UNIQUE (\"connection_id\"), CONSTRAINT \"PK_BaseConfig_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfig_type\" ON \"BaseConfig\" (\"type\")`)\n await queryRunner.query(`ALTER TABLE \"Identity\" RENAME COLUMN \"contactId\" TO \"partyId\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" ALTER COLUMN \"roles\" SET NOT NULL`)\n await queryRunner.query(`CREATE TYPE \"public\".\"IdentityOrigin_type_enum\" AS ENUM('INTERNAL', 'EXTERNAL')`)\n await queryRunner.query(`ALTER TABLE \"Identity\" ADD COLUMN \"origin\" \"public\".\"IdentityOrigin_type_enum\" DEFAULT 'EXTERNAL' NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"Identity\" ALTER COLUMN \"origin\" DROP DEFAULT`)\n\n await queryRunner.query(\n `ALTER TABLE \"CorrelationIdentifier\" ADD CONSTRAINT \"FK_CorrelationIdentifier_identity_id\" FOREIGN KEY (\"identity_id\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"IdentityMetadata\" ADD CONSTRAINT \"FK_IdentityMetadata_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseContact\" ADD CONSTRAINT \"FK_BaseContact_party_id\" FOREIGN KEY (\"party_id\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"PartyRelationship\" ADD CONSTRAINT \"FK_PartyRelationship_left_id\" FOREIGN KEY (\"left_id\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"PartyRelationship\" ADD CONSTRAINT \"FK_PartyRelationship_right_id\" FOREIGN KEY (\"right_id\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"ElectronicAddress\" ADD CONSTRAINT \"FK_ElectronicAddress_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"PhysicalAddress\" ADD CONSTRAINT \"FK_PhysicalAddress_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Party\" ADD CONSTRAINT \"FK_Party_party_type_id\" FOREIGN KEY (\"party_type_id\") REFERENCES \"PartyType\"(\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Identity\" ADD CONSTRAINT \"FK_Identity_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Connection\" ADD CONSTRAINT \"FK_Connection_identity_id\" FOREIGN KEY (\"identity_id\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseConfig\" ADD CONSTRAINT \"FK_BaseConfig_connection_id\" FOREIGN KEY (\"connection_id\") REFERENCES \"Connection\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n\n // migrate existing data\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" RENAME CONSTRAINT \"UQ_Correlation_id\" TO \"UQ_CorrelationIdentifier_correlation_id\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" RENAME CONSTRAINT \"UQ_Identity_Alias\" TO \"UQ_Identity_alias\"`)\n await queryRunner.query(\n `INSERT INTO \"BaseConfig\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connectionId\" FROM \"BaseConfigEntity\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n await queryRunner.query(\n `INSERT INTO \"PartyType\"(id, type, origin, name, description, tenant_id, created_at, last_updated_at) VALUES ('3875c12e-fdaa-4ef6-a340-c936e054b627', 'organization', 'INTERNAL', 'Sphereon_default_organization_type', 'sphereon_default_organization', '95e09cfc-c974-4174-86aa-7bf1d5251fb4', now(), now())`,\n )\n await queryRunner.query(\n `INSERT INTO \"PartyType\"(id, type, origin, name, description, tenant_id, created_at, last_updated_at) VALUES ('7d248798-41ca-4fc1-a130-9934b43d532e', 'naturalPerson', 'INTERNAL', 'Sphereon_default_natural_person_type', 'sphereon_default_natural_person', '95e09cfc-c974-4174-86aa-7bf1d5251fb4', now(), now())`,\n )\n await queryRunner.query(\n `INSERT INTO \"Party\"(id, uri, created_at, last_updated_at, party_type_id) SELECT id, uri, created_at, last_updated_at, '3875c12e-fdaa-4ef6-a340-c936e054b627' FROM \"Contact\"`,\n )\n await queryRunner.query(\n `INSERT INTO \"BaseContact\"(id, legal_name, display_name, party_id, created_at, last_updated_at, type) SELECT id, name, alias, id, created_at, last_updated_at, 'Organization' FROM \"Contact\"`,\n )\n await queryRunner.query(`DROP TABLE \"Contact\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP CONSTRAINT \"FK_BaseConfig_connection_id\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP CONSTRAINT \"FK_Connection_identity_id\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP CONSTRAINT \"FK_Identity_partyId\"`)\n await queryRunner.query(`ALTER TABLE \"Party\" DROP CONSTRAINT \"FK_Party_party_type_id\"`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP CONSTRAINT \"FK_PhysicalAddress_partyId\"`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP CONSTRAINT \"FK_ElectronicAddress_partyId\"`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP CONSTRAINT \"FK_PartyRelationship_right_id\"`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP CONSTRAINT \"FK_PartyRelationship_left_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP CONSTRAINT \"FK_BaseContact_party_id\"`)\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" DROP CONSTRAINT \"FK_IdentityMetadata_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP CONSTRAINT \"FK_CorrelationIdentifier_identity_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" ALTER COLUMN \"roles\" DROP NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"origin\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"IdentityOrigin_type_enum\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" RENAME COLUMN \"partyId\" TO \"contactId\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" RENAME COLUMN \"identity_id\" TO \"identityId\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" RENAME COLUMN \"identity_id\" TO \"identityId\"`)\n\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfig_type\"`)\n await queryRunner.query(`DROP TABLE \"BaseConfig\"`)\n await queryRunner.query(`DROP TABLE \"Party\"`)\n await queryRunner.query(`DROP INDEX \"IDX_PartyRelationship_left_right\"`)\n await queryRunner.query(`DROP TABLE \"PartyRelationship\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseContact_type\"`)\n await queryRunner.query(`DROP TABLE \"BaseContact\"`)\n await queryRunner.query(`DROP TABLE \"ElectronicAddress\"`)\n await queryRunner.query(`DROP TABLE \"PhysicalAddress\"`)\n await queryRunner.query(`DROP INDEX \"IDX_PartyType_type_tenant_id\"`)\n await queryRunner.query(`DROP TABLE \"PartyType\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"PartyOrigin_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"PartyType_type_enum\"`)\n\n await queryRunner.query(\n `ALTER TABLE \"Connection\" ADD CONSTRAINT \"FK_Connection_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Identity\" ADD CONSTRAINT \"FK_Identity_contactId\" FOREIGN KEY (\"contactId\") REFERENCES \"Contact\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"IdentityMetadata\" ADD CONSTRAINT \"FK_IdentityMetadata_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"CorrelationIdentifier\" ADD CONSTRAINT \"FK_CorrelationIdentifier_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n\n await queryRunner.query(\n `CREATE TABLE \"Contact\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"uri\" character varying(255), \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"name\" character varying(255), \"alias\" character varying(255), CONSTRAINT \"PK_Contact_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"Contact\"(id, uri, created_at, last_updated_at, name, alias) SELECT id, uri, created_at, last_updated_at, (SELECT legal_name FROM \"BaseContact\" WHERE \"BaseContact\".\"party_id\" = \"Party\".\"id\"), (SELECT display_name FROM \"BaseContact\" WHERE \"BaseContact\".\"party_id\" = \"Party\".\"id\") FROM \"Party\" WHERE party_type_id = '3875c12e-fdaa-4ef6-a340-c936e054b627'`,\n )\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1690925872693 implements MigrationInterface {\n name = 'CreateContacts1690925872693'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"temporary_CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"UQ_CorrelationIdentifier_correlation_id\" UNIQUE (\"correlation_id\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identityId\") SELECT \"id\", \"type\", \"correlation_id\", \"identityId\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_CorrelationIdentifier\" RENAME TO \"CorrelationIdentifier\"`)\n // roles not null\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"contactId\" varchar, CONSTRAINT \"UQ_Identity_alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\") SELECT \"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(`INSERT INTO \"temporary_Connection\"(\"id\", \"type\", \"identityId\") SELECT \"id\", \"type\", \"identityId\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Connection\" RENAME TO \"Connection\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identity_id\" varchar, CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identity_id\"), CONSTRAINT \"UQ_CorrelationIdentifier_correlation_id\" UNIQUE (\"correlation_id\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identity_id\") SELECT \"id\", \"type\", \"correlation_id\", \"identityId\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_CorrelationIdentifier\" RENAME TO \"CorrelationIdentifier\"`)\n // contactId -> partyId\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"partyId\" varchar, CONSTRAINT \"UQ_Identity_alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"partyId\") SELECT \"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identity_id\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identity_id\"))`,\n )\n await queryRunner.query(`INSERT INTO \"temporary_Connection\"(\"id\", \"type\", \"identity_id\") SELECT \"id\", \"type\", \"identityId\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Connection\" RENAME TO \"Connection\"`)\n await queryRunner.query(\n `CREATE TABLE \"PartyType\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('naturalPerson','organization') ) NOT NULL, \"origin\" varchar CHECK( \"origin\" IN ('INTERNAL', 'EXTERNAL') ) NOT NULL, \"name\" varchar(255) NOT NULL, \"description\" varchar(255), \"tenant_id\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"UQ_PartyType_name\" UNIQUE (\"name\"))`,\n )\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyType_type_tenant_id\" ON \"PartyType\" (\"type\", \"tenant_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"BaseContact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"legal_name\" varchar(255), \"display_name\" varchar(255), \"first_name\" varchar(255), \"middle_name\" varchar(255), \"last_name\" varchar(255), \"type\" varchar NOT NULL, \"party_id\" varchar, CONSTRAINT \"UQ_BaseContact_legal_name\" UNIQUE (\"legal_name\"), CONSTRAINT \"REL_BaseContact_party_id\" UNIQUE (\"party_id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseContact_type\" ON \"BaseContact\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"PartyRelationship\" (\"id\" varchar PRIMARY KEY NOT NULL, \"left_id\" varchar NOT NULL, \"right_id\" varchar NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')))`,\n )\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyRelationship_left_right\" ON \"PartyRelationship\" (\"left_id\", \"right_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"Party\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"party_type_id\" varchar NOT NULL)`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BaseConfig\" (\"id\" varchar PRIMARY KEY NOT NULL, \"identifier\" varchar(255), \"redirect_url\" varchar(255), \"session_id\" varchar(255), \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" varchar NOT NULL, \"connection_id\" varchar, CONSTRAINT \"REL_BaseConfig_connection_id\" UNIQUE (\"connection_id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfig_type\" ON \"BaseConfig\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identity_id\" varchar, CONSTRAINT \"REL_CorrelationIdentifier_identity_id\" UNIQUE (\"identity_id\"), CONSTRAINT \"UQ_CorrelationIdentifier_correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"FK_CorrelationIdentifier_identity_id\" FOREIGN KEY (\"identity_id\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identity_id\") SELECT \"id\", \"type\", \"correlation_id\", \"identity_id\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_CorrelationIdentifier\" RENAME TO \"CorrelationIdentifier\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseContact_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseContact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"legal_name\" varchar(255), \"display_name\" varchar(255), \"first_name\" varchar(255), \"middle_name\" varchar(255), \"last_name\" varchar(255), \"type\" varchar NOT NULL, \"party_id\" varchar, CONSTRAINT \"UQ_BaseContact_legal_name\" UNIQUE (\"legal_name\"), CONSTRAINT \"REL_BaseContact_party_id\" UNIQUE (\"party_id\"), CONSTRAINT \"FK_BaseContact_party_id\" FOREIGN KEY (\"party_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseContact\"(\"id\", \"created_at\", \"last_updated_at\", \"legal_name\", \"display_name\", \"first_name\", \"middle_name\", \"last_name\", \"type\", \"party_id\") SELECT \"id\", \"created_at\", \"last_updated_at\", \"legal_name\", \"display_name\", \"first_name\", \"middle_name\", \"last_name\", \"type\", \"party_id\" FROM \"BaseContact\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseContact\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseContact\" RENAME TO \"BaseContact\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseContact_type\" ON \"BaseContact\" (\"type\")`)\n await queryRunner.query(`DROP INDEX \"IDX_PartyRelationship_left_right\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_PartyRelationship\" (\"id\" varchar PRIMARY KEY NOT NULL, \"left_id\" varchar NOT NULL, \"right_id\" varchar NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"FK_PartyRelationship_left_id\" FOREIGN KEY (\"left_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_PartyRelationship_right_id\" FOREIGN KEY (\"right_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_PartyRelationship\"(\"id\", \"left_id\", \"right_id\", \"created_at\", \"last_updated_at\") SELECT \"id\", \"left_id\", \"right_id\", \"created_at\", \"last_updated_at\" FROM \"PartyRelationship\"`,\n )\n await queryRunner.query(`DROP TABLE \"PartyRelationship\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_PartyRelationship\" RENAME TO \"PartyRelationship\"`)\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyRelationship_left_right\" ON \"PartyRelationship\" (\"left_id\", \"right_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"ElectronicAddress\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar(255) NOT NULL, \"electronic_address\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"partyId\" varchar, CONSTRAINT \"FK_ElectronicAddress_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `CREATE TABLE \"PhysicalAddress\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar(255) NOT NULL, \"street_name\" varchar(255) NOT NULL, \"street_number\" varchar(255) NOT NULL, \"postal_code\" varchar(255) NOT NULL, \"city_name\" varchar(255) NOT NULL, \"province_name\" varchar(255) NOT NULL, \"country_code\" varchar(2) NOT NULL, \"building_name\" varchar(255), \"partyId\" varchar, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"FK_PhysicalAddressEntity_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `CREATE TABLE \"temporary_Party\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"party_type_id\" varchar NOT NULL, CONSTRAINT \"FK_Party_party_type_id\" FOREIGN KEY (\"party_type_id\") REFERENCES \"PartyType\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Party\"(\"id\", \"uri\", \"created_at\", \"last_updated_at\", \"party_type_id\") SELECT \"id\", \"uri\", \"created_at\", \"last_updated_at\", \"party_type_id\" FROM \"Party\"`,\n )\n await queryRunner.query(`DROP TABLE \"Party\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Party\" RENAME TO \"Party\"`)\n // Restore lost FK_Identity_partyId\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"partyId\" varchar, CONSTRAINT \"UQ_Identity_alias\" UNIQUE (\"alias\"), CONSTRAINT \"FK_Identity_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"partyId\") SELECT \"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"partyId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identity_id\" varchar, CONSTRAINT \"REL_Connection_identity_id\" UNIQUE (\"identity_id\"), CONSTRAINT \"FK_Connection_identity_id\" FOREIGN KEY (\"identity_id\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(`INSERT INTO \"temporary_Connection\"(\"id\", \"type\", \"identity_id\") SELECT \"id\", \"type\", \"identity_id\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Connection\" RENAME TO \"Connection\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfig_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseConfig\" (\"id\" varchar PRIMARY KEY NOT NULL, \"identifier\" varchar(255), \"redirect_url\" varchar(255), \"session_id\" varchar(255), \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" varchar NOT NULL, \"connection_id\" varchar, CONSTRAINT \"REL_BaseConfig_connection_id\" UNIQUE (\"connection_id\"), CONSTRAINT \"FK_BaseConfig_connection_id\" FOREIGN KEY (\"connection_id\") REFERENCES \"Connection\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseConfig\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\" FROM \"BaseConfig\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfig\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseConfig\" RENAME TO \"BaseConfig\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfig_type\" ON \"BaseConfig\" (\"type\")`)\n\n // migrate existing data\n await queryRunner.query(\n `INSERT INTO \"BaseConfig\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connectionId\" FROM \"BaseConfigEntity\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n await queryRunner.query(\n `INSERT INTO \"PartyType\"(id, type, origin, name, description, tenant_id, created_at, last_updated_at) VALUES ('3875c12e-fdaa-4ef6-a340-c936e054b627', 'organization', 'INTERNAL', 'Sphereon_default_organization_type', 'sphereon_default_organization', '95e09cfc-c974-4174-86aa-7bf1d5251fb4', datetime('now'), datetime('now'))`,\n )\n await queryRunner.query(\n `INSERT INTO \"PartyType\"(id, type, origin, name, description, tenant_id, created_at, last_updated_at) VALUES ('7d248798-41ca-4fc1-a130-9934b43d532e', 'naturalPerson', 'INTERNAL', 'Sphereon_default_natural_person_type', 'sphereon_default_natural_person', '95e09cfc-c974-4174-86aa-7bf1d5251fb4', datetime('now'), datetime('now'))`,\n )\n await queryRunner.query(\n `INSERT INTO \"Party\"(id, uri, created_at, last_updated_at, party_type_id) SELECT id, uri, created_at, last_updated_at, '3875c12e-fdaa-4ef6-a340-c936e054b627' FROM \"Contact\"`,\n )\n await queryRunner.query(\n `INSERT INTO \"BaseContact\"(id, legal_name, display_name, party_id, created_at, last_updated_at, type) SELECT id, name, alias, id, created_at, last_updated_at, 'Organization' FROM \"Contact\"`,\n )\n await queryRunner.query(`DROP TABLE \"Contact\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"Contact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"name\" varchar(255), \"alias\" varchar(255))`,\n )\n await queryRunner.query(\n `INSERT INTO \"Contact\"(id, uri, created_at, last_updated_at, name, alias) SELECT id, uri, created_at, last_updated_at, (SELECT legal_name FROM \"BaseContact\" WHERE \"BaseContact\".\"party_id\" = \"Party\".\"id\"), (SELECT display_name FROM \"BaseContact\" WHERE \"BaseContact\".\"party_id\" = \"Party\".\"id\") FROM \"Party\" WHERE party_type_id = '3875c12e-fdaa-4ef6-a340-c936e054b627'`,\n )\n await queryRunner.query(`DROP TABLE \"BaseContact\"`)\n await queryRunner.query(`DROP TABLE \"Party\"`)\n\n await queryRunner.query(\n `CREATE TABLE \"BaseConfigEntity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"identifier\" varchar(255), \"redirect_url\" varchar(255), \"session_id\" varchar(255), \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" varchar NOT NULL, \"connectionId\" varchar)`,\n )\n await queryRunner.query(\n `INSERT INTO \"BaseConfigEntity\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connectionId\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\" FROM \"BaseConfig\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfig\"`)\n\n await queryRunner.query(\n `CREATE TABLE \"temporary_Party\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"party_type_id\" varchar NOT NULL, CONSTRAINT \"FK_Party_party_type_id\" FOREIGN KEY (\"party_type_id\") REFERENCES \"PartyType\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Party\"(\"id\", \"uri\", \"created_at\", \"last_updated_at\", \"party_type_id\") SELECT \"id\", \"uri\", \"created_at\", \"last_updated_at\", \"party_type_id\" FROM \"Party\"`,\n )\n await queryRunner.query(`DROP TABLE \"Party\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Party\" RENAME TO \"Party\"`)\n\n await queryRunner.query(`DROP INDEX \"IDX_PartyRelationship_left_right\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_PartyRelationship\" (\"id\" varchar PRIMARY KEY NOT NULL, \"left_id\" varchar NOT NULL, \"right_id\" varchar NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"FK_PartyRelationship_left_id\" FOREIGN KEY (\"left_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_PartyRelationship_right_id\" FOREIGN KEY (\"right_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_PartyRelationship\"(\"id\", \"left_id\", \"right_id\", \"created_at\", \"last_updated_at\") SELECT \"id\", \"left_id\", \"right_id\", \"created_at\", \"last_updated_at\" FROM \"PartyRelationship\"`,\n )\n await queryRunner.query(`DROP TABLE \"PartyRelationship\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_PartyRelationship\" RENAME TO \"PartyRelationship\"`)\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyRelationship_left_right\" ON \"PartyRelationship\" (\"left_id\", \"right_id\")`)\n\n await queryRunner.query(`DROP INDEX \"IDX_BaseContact_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseContact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"legal_name\" varchar(255), \"display_name\" varchar(255), \"first_name\" varchar(255), \"middle_name\" varchar(255), \"last_name\" varchar(255), \"type\" varchar NOT NULL, \"party_id\" varchar, CONSTRAINT \"UQ_BaseContact_legal_name\" UNIQUE (\"legal_name\"), CONSTRAINT \"REL_BaseContact_party_id\" UNIQUE (\"party_id\"), CONSTRAINT \"FK_BaseContact_party_id\" FOREIGN KEY (\"party_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseContact\"(\"id\", \"created_at\", \"last_updated_at\", \"legal_name\", \"display_name\", \"first_name\", \"middle_name\", \"last_name\", \"type\", \"party_id\") SELECT \"id\", \"created_at\", \"last_updated_at\", \"legal_name\", \"display_name\", \"first_name\", \"middle_name\", \"last_name\", \"type\", \"party_id\" FROM \"BaseContact\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseContact\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseContact\" RENAME TO \"BaseContact\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseContact_type\" ON \"BaseContact\" (\"type\")`)\n\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfig_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseConfig\" (\"id\" varchar PRIMARY KEY NOT NULL, \"identifier\" varchar(255), \"redirect_url\" varchar(255), \"session_id\" varchar(255), \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" varchar NOT NULL, \"connection_id\" varchar, CONSTRAINT \"REL_BaseConfig_connection_id\" UNIQUE (\"connection_id\"), CONSTRAINT \"FK_BaseConfig_connection_id\" FOREIGN KEY (\"connection_id\") REFERENCES \"Connection\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseConfig\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\" FROM \"BaseConfig\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfig\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseConfig\" RENAME TO \"BaseConfig\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfig_type\" ON \"BaseConfig\" (\"type\")`)\n\n await queryRunner.query(`DROP INDEX \"IDX_PartyType_type_tenant_id\"`)\n await queryRunner.query(`DROP TABLE \"PartyType\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`DROP TABLE \"ElectronicAddress\"`)\n await queryRunner.query(`DROP TABLE \"PhysicalAddress\"`)\n }\n}\n","import Debug from 'debug'\nimport { MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateStatusList1693866470001 } from '../postgres/1693866470001-CreateStatusList'\nimport { UpdateStatusList1737110469001 } from '../postgres/1737110469001-UpdateStatusList'\nimport { CreateStatusList1693866470002 } from '../sqlite/1693866470000-CreateStatusList'\nimport { UpdateStatusList1737110469000 } from '../sqlite/1737110469000-UpdateStatusList'\n\nconst debug = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateStatusList1693866470000 implements MigrationInterface {\n name = 'CreateStatusList1693866470000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating issuance branding tables')\n const dbType = queryRunner.connection.driver.options.type\n if (dbType === 'postgres') {\n debug('using postgres migration files')\n const createMig = new CreateStatusList1693866470001()\n await createMig.up(queryRunner)\n const updateMig = new UpdateStatusList1737110469001()\n const up = await updateMig.up(queryRunner)\n debug('Migration statements executed')\n return up\n } else if (dbType === 'sqlite' || dbType === 'react-native' || dbType === 'expo') {\n debug('using sqlite/react-native migration files')\n const createMig = new CreateStatusList1693866470002()\n await createMig.up(queryRunner)\n const updateMig = new UpdateStatusList1737110469000()\n const up = await updateMig.up(queryRunner)\n debug('Migration statements executed')\n return up\n } else {\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting issuance branding tables')\n const dbType = queryRunner.connection.driver.options.type\n if (dbType === 'postgres') {\n debug('using postgres migration files')\n const updateMig = new UpdateStatusList1737110469001()\n await updateMig.down(queryRunner)\n const createMig = new CreateStatusList1693866470001()\n const down = await createMig.down(queryRunner)\n debug('Migration statements executed')\n return down\n } else if (dbType === 'sqlite' || dbType === 'react-native' || dbType === 'expo') {\n debug('using sqlite/react-native migration files')\n const updateMig = new UpdateStatusList1737110469000()\n await updateMig.down(queryRunner)\n const createMig = new CreateStatusList1693866470002()\n const down = await createMig.down(queryRunner)\n debug('Migration statements executed')\n return down\n } else {\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","// noinspection SqlPostgresDialect SqlNoDataSourceInspection\nimport { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateStatusList1693866470001 implements MigrationInterface {\n name = 'CreateStatusList1693866470001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`CREATE TYPE \"StatusList_type_enum\" AS ENUM('StatusList2021')`)\n await queryRunner.query(`CREATE TYPE \"StatusList_drivertype_enum\" AS ENUM('agent_typeorm', 'agent_kv_store', 'github', 'agent_filesystem')`)\n await queryRunner.query(`CREATE TYPE \"StatusList_credentialidmode_enum\" AS ENUM('ISSUANCE', 'PERSISTENCE', 'NEVER')`)\n\n await queryRunner.query(\n `CREATE TABLE \"StatusListEntry\"\n (\n \"statusListId\" character varying NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" character varying,\n \"credentialHash\" character varying(128),\n \"correlationId\" character varying(255),\n \"value\" character varying(50),\n CONSTRAINT \"PK_68704d2d13857360c6b44a3d1d0\" PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )`,\n )\n await queryRunner.query(\n `CREATE TABLE \"StatusList\"\n (\n \"id\" character varying NOT NULL,\n \"correlationId\" character varying NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" \"StatusList_type_enum\" NOT NULL DEFAULT 'StatusList2021',\n \"driverType\" \"StatusList_drivertype_enum\" NOT NULL DEFAULT 'agent_typeorm',\n \"credentialIdMode\" \"StatusList_credentialidmode_enum\" NOT NULL DEFAULT 'ISSUANCE',\n \"proofFormat\" character varying NOT NULL DEFAULT 'lds',\n \"indexingDirection\" character varying NOT NULL DEFAULT 'rightToLeft',\n \"statusPurpose\" character varying NOT NULL DEFAULT 'revocation',\n \"statusListCredential\" text,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\"),\n CONSTRAINT \"PK_StatusList_Id\" PRIMARY KEY (\"id\")\n )`,\n )\n await queryRunner.query(\n `ALTER TABLE \"StatusListEntry\"\n ADD CONSTRAINT \"FK_statusListEntry_statusListId\" FOREIGN KEY (\"statusListId\") REFERENCES \"StatusList\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\"\n DROP CONSTRAINT \"FK_statusListEntry_statusListId\"`)\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`DROP TYPE \"StatusList_credentialidmode_enum\"`)\n await queryRunner.query(`DROP TYPE \"StatusList_drivertype_enum\"`)\n await queryRunner.query(`DROP TYPE \"StatusList_type_enum\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class UpdateStatusList1737110469001 implements MigrationInterface {\n name = 'UpdateStatusList1737110469001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Add new enum value\n await queryRunner.query(`ALTER TYPE \"StatusList_type_enum\" ADD VALUE 'OAuthStatusList'`)\n\n // Make columns nullable and add new columns\n await queryRunner.query(`ALTER TABLE \"StatusList\" ALTER COLUMN \"indexingDirection\" DROP NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ALTER COLUMN \"statusPurpose\" DROP NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD \"bitsPerStatus\" integer DEFAULT 1`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD \"expiresAt\" timestamp with time zone`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"expiresAt\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"bitsPerStatus\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ALTER COLUMN \"statusPurpose\" SET NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ALTER COLUMN \"indexingDirection\" SET NOT NULL`)\n\n // Note: Cannot remove enum value in Postgres, would need to recreate the type\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateStatusList1693866470002 implements MigrationInterface {\n name = 'CreateStatusList1693866470002'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"StatusListEntry\"\n (\n \"statusListId\" varchar NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" varchar,\n \"credentialHash\" varchar(128),\n \"correlationId\" varchar(255),\n \"value\" varchar(50),\n PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )`,\n )\n await queryRunner.query(\n `CREATE TABLE \"StatusList\"\n (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK ( \"type\" IN ('StatusList2021') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK ( \"driverType\" IN ('agent_typeorm', 'agent_kv_store', 'github',\n 'agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK ( \"credentialIdMode\" IN ('ISSUANCE', 'PERSISTENCE', 'NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK ( \"proofFormat\" IN ('lds', 'jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK ( \"indexingDirection\" IN ('rightToLeft') ) NOT NULL DEFAULT ('rightToLeft'),\n \"statusPurpose\" varchar NOT NULL DEFAULT ('revocation'),\n \"statusListCredential\" text,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )`,\n )\n await queryRunner.query(\n `CREATE TABLE \"temporary_StatusListEntry\"\n (\n \"statusListId\" varchar NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" varchar,\n \"credentialHash\" varchar(128),\n \"correlationId\" varchar(255),\n \"value\" varchar(50),\n CONSTRAINT \"FK_statusListEntry_statusListId\" FOREIGN KEY (\"statusListId\") REFERENCES \"StatusList\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION,\n PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_StatusListEntry\"(\"statusListId\", \"statusListIndex\", \"credentialId\",\n \"credentialHash\", \"correlationId\", \"value\")\n SELECT \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\", \"correlationId\", \"value\"\n FROM \"StatusListEntry\"`,\n )\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusListEntry\" RENAME TO \"StatusListEntry\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class UpdateStatusList1737110469000 implements MigrationInterface {\n name = 'UpdateStatusList1737110469000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Create temporary table with new schema\n await queryRunner.query(\n `CREATE TABLE \"temporary_StatusList\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK( \"type\" IN ('StatusList2021', 'OAuthStatusList') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK( \"driverType\" IN ('agent_typeorm','agent_kv_store','github','agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK( \"credentialIdMode\" IN ('ISSUANCE','PERSISTENCE','NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK( \"proofFormat\" IN ('lds','jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK( \"indexingDirection\" IN ('rightToLeft') ),\n \"statusPurpose\" varchar,\n \"statusListCredential\" text,\n \"bitsPerStatus\" integer,\n \"expiresAt\" datetime,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )`,\n )\n\n // Copy data from old table to temporary table\n await queryRunner.query(\n `INSERT INTO \"temporary_StatusList\"(\n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\"\n )\n SELECT \n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\"\n FROM \"StatusList\"`,\n )\n\n // Drop old table and rename temporary table\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusList\" RENAME TO \"StatusList\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"StatusListEntry\"\n RENAME COLUMN \"entryCorrelationId\" TO \"correlationId\"\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"StatusListEntry\"\n DROP COLUMN \"statusListCorrelationId\"\n `)\n\n // Create temporary table with old schema\n await queryRunner.query(\n `CREATE TABLE \"temporary_StatusList\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK( \"type\" IN ('StatusList2021') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK( \"driverType\" IN ('agent_typeorm','agent_kv_store','github','agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK( \"credentialIdMode\" IN ('ISSUANCE','PERSISTENCE','NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK( \"proofFormat\" IN ('lds','jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK( \"indexingDirection\" IN ('rightToLeft') ) NOT NULL DEFAULT ('rightToLeft'),\n \"statusPurpose\" varchar NOT NULL DEFAULT ('revocation'),\n \"statusListCredential\" text,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )`,\n )\n\n // Copy data back, excluding new columns\n await queryRunner.query(\n `INSERT INTO \"temporary_StatusList\"(\n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\"\n )\n SELECT \n \"id\", \"correlationId\", \"length\", \"issuer\", \n CASE WHEN \"type\" = 'OAuthStatusList' THEN 'StatusList2021' ELSE \"type\" END,\n \"driverType\", \"credentialIdMode\", \"proofFormat\", \"indexingDirection\",\n COALESCE(\"statusPurpose\", 'revocation'), \"statusListCredential\"\n FROM \"StatusList\"`,\n )\n\n // Drop new table and rename temporary table back\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusList\" RENAME TO \"StatusList\"`)\n }\n}\n","import Debug, { Debugger } from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateAuditEvents1701634812183 } from '../postgres/1701634812183-CreateAuditEvents'\nimport { CreateAuditEvents1701634819487 } from '../sqlite/1701634819487-CreateAuditEvents'\n\nconst debug: Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateAuditEvents1701635835330 implements MigrationInterface {\n name: string = 'CreateAuditEvents1701635835330'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating audit events tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateAuditEvents1701634812183 = new CreateAuditEvents1701634812183()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateAuditEvents1701634819487 = new CreateAuditEvents1701634819487()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting audit events tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateAuditEvents1701634812183 = new CreateAuditEvents1701634812183()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateAuditEvents1701634819487 = new CreateAuditEvents1701634819487()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateAuditEvents1701634812183 implements MigrationInterface {\n name = 'CreateAuditEvents1701634812183'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`CREATE TYPE \"public\".\"Level_enum\" AS ENUM('0', '1', '2', '3', '4')`)\n await queryRunner.query(\n `CREATE TYPE \"public\".\"System_enum\" AS ENUM('general', 'kms', 'identity', 'oid4vci', 'oid4vp', 'siopv2', 'PE', 'credentials', 'web3', 'profile', 'contact')`,\n )\n await queryRunner.query(\n `CREATE TYPE \"public\".\"Subsystem_type_enum\" AS ENUM('key', 'did_provider', 'did_resolver', 'oid4vp_op', 'oid4vci_client', 'siopv2_op', 'contact_manager', 'vc_issuer', 'vc_verifier', 'vc_persistence', 'transport', 'profile', 'api')`,\n )\n await queryRunner.query(`CREATE TYPE \"public\".\"Action_type_enum\" AS ENUM('create', 'read', 'update', 'delete', 'execute')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"Initiator_type_enum\" AS ENUM('user', 'system', 'external')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"System_correlation_id_type_enum\" AS ENUM('did', 'url', 'email', 'hostname', 'phone', 'user')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"Party_correlation_type_enum\" AS ENUM('did', 'url', 'email', 'hostname', 'phone')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"Event_type_enum\" AS ENUM('audit', 'activity', 'general')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"Event_credential_type_enum\" AS ENUM('JSON_LD', 'JWT', 'SD_JWT', 'MSO_MDOC')`)\n await queryRunner.query(\n `CREATE TABLE \"AuditEvents\" (\n \"id\" uuid NOT NULL DEFAULT uuid_generate_v4(),\n \"eventType\" \"public\".\"Event_type_enum\" NOT NULL,\n \"timestamp\" TIMESTAMP NOT NULL, \n \"level\" \"public\".\"Level_enum\" NOT NULL, \n \"correlationId\" TEXT NOT NULL, \n \"system\" \"public\".\"System_enum\" NOT NULL, \n \"subSystemType\" \"public\".\"Subsystem_type_enum\" NOT NULL, \n \"actionType\" \"public\".\"Action_type_enum\" NOT NULL, \n \"actionSubType\" TEXT NOT NULL, \n \"initiatorType\" \"public\".\"Initiator_type_enum\" NOT NULL, \n \"systemCorrelationIdType\" \"public\".\"System_correlation_id_type_enum\", \n \"systemCorrelationId\" TEXT, \n \"systemAlias\" TEXT, \n \"partyCorrelationType\" \"public\".\"Party_correlation_type_enum\", \n \"partyCorrelationId\" TEXT, \n \"partyAlias\" TEXT, \n \"credentialType\" \"public\".\"Event_credential_type_enum\",\n \"credentialHash\" TEXT,\n \"originalCredential\" TEXT,\n \"sharePurpose\" TEXT,\n \"description\" TEXT NOT NULL, \n \"data\" TEXT, \n \"diagnosticData\" TEXT, \n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \n \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \n CONSTRAINT \"PK_AuditEvents_id\" PRIMARY KEY (\"id\"))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"AuditEvents\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Party_correlation_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"System_correlation_id_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Initiator_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Action_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Subsystem_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"System_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Level_enum\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateAuditEvents1701634819487 implements MigrationInterface {\n name = 'CreateAuditEvents1701634819487'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"AuditEvents\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"eventType\" varchar CHECK( \"eventType\" IN ('audit','activity','general') ) NOT NULL,\n \"timestamp\" datetime NOT NULL, \n \"level\" varchar CHECK( \"level\" IN ('0','1','2','3','4') ) NOT NULL, \n \"correlationId\" varchar NOT NULL, \n \"system\" varchar CHECK( \"system\" IN ('general','kms','identity','oid4vci','oid4vp','siopv2','PE','credentials','web3','profile','contact') ) NOT NULL, \n \"subSystemType\" varchar CHECK( \"subSystemType\" IN ('key','did_provider','did_resolver','oid4vp_op','oid4vci_client','siopv2_op','contact_manager','vc_issuer','vc_verifier','vc_persistence','transport','profile','api') ) NOT NULL, \n \"actionType\" varchar CHECK( \"actionType\" IN ('create','read','update','delete','execute') ) NOT NULL, \n \"actionSubType\" varchar NOT NULL, \n \"initiatorType\" varchar CHECK( \"initiatorType\" IN ('user','system','external') ) NOT NULL, \n \"systemCorrelationIdType\" varchar CHECK( \"systemCorrelationIdType\" IN ('did','url','email','hostname','phone','user') ), \n \"systemCorrelationId\" varchar, \n \"systemAlias\" varchar, \n \"partyCorrelationType\" varchar CHECK( \"partyCorrelationType\" IN ('did','url','email','hostname','phone') ), \n \"partyCorrelationId\" varchar, \n \"partyAlias\" varchar,\n \"credentialType\" varchar CHECK( \"credentialType\" IN ('JSON_LD','JWT','SD_JWT','MSO_MDOC') ),\n \"credentialHash\" varchar,\n \"parentCredentialHash\" varchar,\n \"originalCredential\" varchar,\n \"sharePurpose\" varchar,\n \"description\" varchar NOT NULL, \n \"data\" varchar, \n \"diagnosticData\" varchar, \n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"AuditEvents\"`)\n }\n}\n","import Debug, { Debugger } from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateDigitalCredential1708525189001 } from '../postgres/1708525189001-CreateDigitalCredential'\nimport { CreateDigitalCredential1708525189002 } from '../sqlite/1708525189002-CreateDigitalCredential'\n\nconst debug: Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateDigitalCredential1708525189000 implements MigrationInterface {\n name: string = 'CreateDigitalCredential1708525189000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating DigitalCredential tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file for DigitalCredential')\n const mig: CreateDigitalCredential1708525189001 = new CreateDigitalCredential1708525189001()\n await mig.up(queryRunner)\n debug('Postgres Migration statements for DigitalCredential executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file for DigitalCredential')\n const mig: CreateDigitalCredential1708525189002 = new CreateDigitalCredential1708525189002()\n await mig.up(queryRunner)\n debug('SQLite Migration statements for DigitalCredential executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo, and postgres for UniformCredential. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting DigitalCredential tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file for DigitalCredential')\n const mig: CreateDigitalCredential1708525189001 = new CreateDigitalCredential1708525189001()\n await mig.down(queryRunner)\n debug('Postgres Migration statements for DigitalCredential reverted')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file for DigitalCredential')\n const mig: CreateDigitalCredential1708525189002 = new CreateDigitalCredential1708525189002()\n await mig.down(queryRunner)\n debug('SQLite Migration statements for DigitalCredential reverted')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo, and postgres for DigitalCredential. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateDigitalCredential1708525189001 implements MigrationInterface {\n name = 'CreateDigitalCredential1708525189001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`CREATE TYPE \"digital_document_type\" AS ENUM('VC', 'VP', 'C', 'P')`)\n await queryRunner.query(`CREATE TYPE \"digital_regulation_type\" AS ENUM('PID', 'QEAA', 'EAA', 'NON_REGULATED')`)\n await queryRunner.query(`CREATE TYPE \"digital_credential_document_format\" AS ENUM('JSON_LD', 'JWT', 'SD_JWT', 'MSO_MDOC')`)\n await queryRunner.query(`CREATE TYPE \"digital_credential_credential_role\" AS ENUM('ISSUER', 'VERIFIER', 'HOLDER', 'FEDERATION_TRUST_ANCHOR')`)\n await queryRunner.query(`CREATE TYPE \"digital_credential_correlation_type\" AS ENUM('DID', 'KID', 'URL', 'X509_SAN')`)\n await queryRunner.query(`CREATE TYPE \"digital_credential_state_type\" AS ENUM('REVOKED', 'VERIFIED', 'EXPIRED')`)\n\n // TODO FK for parent\n\n await queryRunner.query(`\n CREATE TABLE \"DigitalCredential\" (\n \"id\" uuid NOT NULL DEFAULT uuid_generate_v4(),\n \"parent_id\" text,\n \"document_type\" \"digital_document_type\" NOT NULL,\n \"regulation_type\" \"digital_regulation_type\" NOT NULL DEFAULT 'NON_REGULATED'::\"digital_regulation_type\",\n \"document_format\" \"digital_credential_document_format\" NOT NULL,\n \"credential_role\" \"digital_credential_credential_role\" NOT NULL,\n \"raw_document\" text NOT NULL,\n \"uniform_document\" text NOT NULL,\n \"credential_id\" text,\n \"hash\" text NOT NULL,\n \"kms_key_ref\" text,\n \"identifier_method\" text,\n \"issuer_correlation_type\" \"digital_credential_correlation_type\" NOT NULL,\n \"subject_correlation_type\" \"digital_credential_correlation_type\",\n \"issuer_correlation_id\" text NOT NULL,\n \"subject_correlation_id\" text,\n \"verified_state\" \"digital_credential_state_type\",\n \"issuer_signed\" boolean,\n \"rp_correlation_id\" text,\n \"rp_correlation_type\" \"digital_credential_correlation_type\",\n \"tenant_id\" text,\n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"presented_at\" DATE,\n \"valid_from\" DATE,\n \"valid_until\" DATE,\n \"verified_at\" DATE,\n \"revoked_at\" DATE,\n PRIMARY KEY (\"id\"),\n UNIQUE (\"hash\", \"credential_role\")\n )\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"DigitalCredential\"`)\n await queryRunner.query(`DROP TYPE \"digital_credential_state_type\"`)\n await queryRunner.query(`DROP TYPE \"digital_credential_correlation_type\"`)\n await queryRunner.query(`DROP TYPE \"digital_credential_document_format\"`)\n await queryRunner.query(`DROP TYPE \"digital_credential_credential_role\"`)\n await queryRunner.query(`DROP TYPE \"digital_regulation_type\"`)\n await queryRunner.query(`DROP TYPE \"digital_document_type\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateDigitalCredential1708525189002 implements MigrationInterface {\n name = 'CreateDigitalCredential1708525189002'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // TODO FK for parent\n await queryRunner.query(`\n CREATE TABLE \"DigitalCredential\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"parent_id\" text, \n \"document_type\" varchar CHECK( \"document_type\" IN ('VC', 'VP', 'C', 'P') ) NOT NULL,\n \"regulation_type\" varchar CHECK( \"regulation_type\" IN ('PID', 'QEAA', 'EAA', 'NON_REGULATED') ) NOT NULL DEFAULT 'NON_REGULATED',\n \"document_format\" varchar CHECK( \"document_format\" IN ('JSON_LD', 'JWT', 'SD_JWT', 'MSO_MDOC') ) NOT NULL,\n \"credential_role\" varchar CHECK( \"credential_role\" IN ('ISSUER', 'VERIFIER', 'HOLDER', 'FEDERATION_TRUST_ANCHOR') ) NOT NULL,\n \"raw_document\" text NOT NULL,\n \"uniform_document\" text NOT NULL,\n \"credential_id\" text,\n \"hash\" text NOT NULL,\n \"kms_key_ref\" text,\n \"identifier_method\" text,\n \"issuer_correlation_type\" varchar CHECK( \"issuer_correlation_type\" IN ('DID', 'KID', 'URL', 'X509_SAN') ) NOT NULL,\n \"subject_correlation_type\" varchar CHECK( \"subject_correlation_type\" IN ('DID', 'KID', 'URL', 'X509_SAN') ),\n \"issuer_correlation_id\" text NOT NULL,\n \"subject_correlation_id\" text,\n \"issuer_signed\" boolean,\n \"rp_correlation_id\" text,\n \"rp_correlation_type\" varchar CHECK( \"issuer_correlation_type\" IN ('DID', 'KID', 'URL', 'X509_SAN') ),\n \"verified_state\" varchar CHECK( \"verified_state\" IN ('REVOKED', 'VERIFIED', 'EXPIRED') ),\n \"tenant_id\" text,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"presented_at\" datetime,\n \"valid_from\" datetime,\n \"valid_until\" datetime,\n \"verified_at\" datetime,\n \"revoked_at\" datetime,\n UNIQUE (\"hash\", \"credential_role\")\n )\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"DigitalCredential\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateMachineStateStore1708797018115 } from '../postgres/1708797018115-CreateMachineStateStore'\nimport { CreateMachineStateStore1708796002272 } from '../sqlite/1708796002272-CreateMachineStateStore'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateMachineStateStore1708098041262 implements MigrationInterface {\n name = 'CreateMachineStateStore1708098041262'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateMachineStateStore1708797018115 = new CreateMachineStateStore1708797018115()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateMachineStateStore1708796002272 = new CreateMachineStateStore1708796002272()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateMachineStateStore1708797018115 = new CreateMachineStateStore1708797018115()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateMachineStateStore1708796002272 = new CreateMachineStateStore1708796002272()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateMachineStateStore1708797018115 implements MigrationInterface {\n name = 'CreateMachineStateStore1708797018115'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"MachineStateInfoEntity\" (\n \"instance_id\" text NOT NULL,\n \"session_id\" text,\n \"latest_state_name\" text,\n \"machine_name\" text NOT NULL,\n \"latest_event_type\" text NOT NULL,\n \"state\" text NOT NULL,\n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"updated_count\" integer NOT NULL DEFAULT 0,\n \"expires_at\" TIMESTAMP,\n \"completed_at\" TIMESTAMP,\n \"tenant_id\" text,\n CONSTRAINT \"PK_MachineStateInfoEntity_id\" PRIMARY KEY (\"instance_id\")\n )\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"MachineStateInfoEntity\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateMachineStateStore1708796002272 implements MigrationInterface {\n name = 'CreateMachineStateStore1708796002272'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"MachineStateInfoEntity\" (\n \"instance_id\" varchar PRIMARY KEY NOT NULL,\n \"session_id\" varchar,\n \"machine_name\" varchar NOT NULL,\n \"latest_state_name\" varchar,\n \"latest_event_type\" varchar NOT NULL,\n \"state\" text NOT NULL,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"updated_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"updated_count\" integer NOT NULL DEFAULT 0,\n \"expires_at\" datetime,\n \"completed_at\" datetime,\n \"tenant_id\" varchar\n )\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"MachineStateInfoEntity\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateContacts1710438363001 } from '../postgres/1710438363001-CreateContacts'\nimport { CreateContacts1710438363002 } from '../sqlite/1710438363002-CreateContacts'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateContacts1708525189000 implements MigrationInterface {\n name = 'CreateContacts1708525189000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: updating contact tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1710438363001 = new CreateContacts1710438363001()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1710438363002 = new CreateContacts1710438363002()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1710438363001 = new CreateContacts1710438363001()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1710438363002 = new CreateContacts1710438363002()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1710438363001 implements MigrationInterface {\n name = 'CreateContacts1710438363001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"Party\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"Party\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"Identity\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"Connection\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"Connection\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"BaseContact\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" ADD COLUMN \"tenant_id\" uuid`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Party\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Party\" DROP COLUMN \"owner_id\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1710438363002 implements MigrationInterface {\n name = 'CreateContacts1710438363002'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"Party\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"Party\" ADD COLUMN \"tenant_id\" text`)\n\n // Add owner_id, tenant_id & origin\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"alias\" varchar(255) NOT NULL,\n \"roles\" text NOT NULL,\n \"origin\" text NOT NULL,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"partyId\" varchar,\n \"owner_id\" text,\n \"tenant_id\" text,\n CONSTRAINT \"UQ_Identity_alias\" UNIQUE (\"alias\"),\n CONSTRAINT \"FK_Identity_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"partyId\", \"owner_id\", \"tenant_id\", \"origin\")\n SELECT \"id\", \"alias\", \"roles\", 'EXTERNAL' as \"origin\", \"created_at\", \"last_updated_at\", \"partyId\", NULL as \"owner_id\", NULL as \"tenant_id\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"Connection\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"Connection\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"BaseContact\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" ADD COLUMN \"tenant_id\" text`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Party\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Party\" DROP COLUMN \"owner_id\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateContacts1715761125001 } from '../postgres/1715761125001-CreateContacts'\nimport { CreateContacts1715761125002 } from '../sqlite/1715761125002-CreateContacts'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateContacts1715761125000 implements MigrationInterface {\n name = 'CreateContacts1715761125000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: updating contact tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1715761125001 = new CreateContacts1715761125001()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1715761125002 = new CreateContacts1715761125002()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1715761125001 = new CreateContacts1715761125001()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1715761125002 = new CreateContacts1715761125002()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1715761125001 implements MigrationInterface {\n name = 'CreateContacts1715761125001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Upgrade IdentityMetadata table\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`CREATE TABLE \"IdentityMetadata\"\n (\n \"id\" uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),\n \"label\" character varying(255) NOT NULL,\n \"valueType\" character varying NOT NULL,\n \"stringValue\" text,\n \"numberValue\" double precision,\n \"dateValue\" TIMESTAMP,\n \"boolValue\" boolean,\n \"identityId\" uuid,\n CONSTRAINT \"FK_Identity_IdentityMetadata\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE\n )`)\n await queryRunner.query(`INSERT INTO \"IdentityMetadata\" (\"id\", \"label\", \"valueType\", \"stringValue\", \"identityId\")\n SELECT \"id\", \"label\", 'string', \"value\", \"identityId\"\n FROM \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n\n // Create new ContactMetadata table\n await queryRunner.query(`CREATE TABLE \"ContactMetadata\"\n (\n \"id\" uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),\n \"label\" character varying(255) NOT NULL,\n \"valueType\" character varying NOT NULL,\n \"stringValue\" text,\n \"numberValue\" double precision,\n \"dateValue\" TIMESTAMP,\n \"boolValue\" boolean,\n \"contactId\" uuid,\n CONSTRAINT \"FK_BaseContact_ContactMetadata\" FOREIGN KEY (\"contactId\") REFERENCES \"BaseContact\" (\"id\") ON DELETE CASCADE\n )`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Drop the ContactMetadata table\n await queryRunner.query(`DROP TABLE \"ContactMetadata\"`)\n\n // Restore the IdentityMetadata table\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`CREATE TABLE \"IdentityMetadata\"\n (\n \"id\" uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),\n \"label\" character varying(255) NOT NULL,\n \"value\" character varying(255) NOT NULL,\n \"identityId\" uuid,\n CONSTRAINT \"FK_Identity_IdentityMetadata\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE\n )`)\n await queryRunner.query(`INSERT INTO \"IdentityMetadata\" (\"id\", \"label\", \"value\", \"identityId\")\n SELECT \"id\", \"label\", \"stringValue\", \"identityId\"\n FROM \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1715761125002 implements MigrationInterface {\n name = 'CreateContacts1715761125002'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Upgrade IdentityMetadata table\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`CREATE TABLE \"IdentityMetadata\"\n (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"label\" varchar(255) NOT NULL,\n \"valueType\" varchar NOT NULL,\n \"stringValue\" varchar(255),\n \"numberValue\" double,\n \"dateValue\" datetime,\n \"boolValue\" boolean,\n \"identityId\" varchar,\n FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE)`)\n await queryRunner.query(`INSERT INTO \"IdentityMetadata\" (\"id\", \"label\", \"valueType\", \"stringValue\", \"identityId\")\n SELECT \"id\", \"label\", 'string', \"value\", \"identityId\"\n FROM \"temporary_IdentityMetadata\"\n `)\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n\n // Create new ContactMetadata table\n await queryRunner.query(`CREATE TABLE \"ContactMetadata\"\n (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"label\" varchar(255) NOT NULL,\n \"valueType\" varchar NOT NULL,\n \"stringValue\" text,\n \"numberValue\" double,\n \"dateValue\" datetime,\n \"boolValue\" boolean,\n \"contactId\" varchar,\n FOREIGN KEY (\"contactId\") REFERENCES \"BaseContact\" (\"id\") ON DELETE CASCADE)`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Drop the ContactMetadata table\n await queryRunner.query(`DROP TABLE \"ContactMetadata\"`)\n\n // Restore the IdentityMetadata table\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`CREATE TABLE \"IdentityMetadata\"\n (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"label\" varchar(255) NOT NULL,\n \"value\" varchar(255) NOT NULL,\n \"identityId\" varchar,\n FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE\n )`)\n await queryRunner.query(`INSERT INTO \"IdentityMetadata\" (\"id\", \"label\", \"value\", \"identityId\")\n SELECT \"id\", \"label\", \"stringValue\", \"identityId\"\n FROM \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n }\n}\n","import { CreateContacts1659463079429 } from './1-CreateContacts'\nimport { CreatePresentationDefinitions1716533767523 } from './10-CreatePresentationDefinitions'\nimport { FixCredentialClaimsReferencesUuid1741895822987 } from './11-FixCredentialClaimsReferenceUuid'\nimport { AddBitstringStatusListEnum1741895823000, CreateBitstringStatusList1741895823000 } from './12-CreateBitstringStatusList'\nimport { CreateDcqlQueryItem1726617600000 } from './13-CreateDcqlQueryItem'\nimport { CreateIssuanceBranding1659463079429 } from './2-CreateIssuanceBranding'\nimport { CreateContacts1690925872318 } from './3-CreateContacts'\nimport { CreateStatusList1693866470000 } from './4-CreateStatusList'\nimport { CreateAuditEvents1701635835330 } from './5-CreateAuditEvents'\nimport { CreateDigitalCredential1708525189000 } from './6-CreateDigitalCredential'\nimport { CreateMachineStateStore1708098041262 } from './7-CreateMachineStateStore'\nimport { CreateContacts1708525189000 } from './8-CreateContacts'\nimport { CreateContacts1715761125000 } from './9-CreateContacts'\n\n/**\n * The migrations array that SHOULD be used when initializing a TypeORM database connection.\n *\n * These ensure the correct creation of tables and the proper migrations of data when tables change between versions.\n *\n * @public\n */\n\n// Individual migrations per purpose. Allows parties to not run migrations and thus create/update tables if they are not using a particular feature (yet)\nexport const DataStoreContactMigrations = [\n CreateContacts1659463079429,\n CreateContacts1690925872318,\n CreateContacts1708525189000,\n CreateContacts1715761125000,\n]\nexport const DataStoreIssuanceBrandingMigrations = [CreateIssuanceBranding1659463079429, FixCredentialClaimsReferencesUuid1741895822987]\nexport const DataStoreStatusListMigrations = [\n CreateStatusList1693866470000,\n AddBitstringStatusListEnum1741895823000,\n CreateBitstringStatusList1741895823000,\n]\nexport const DataStoreEventLoggerMigrations = [CreateAuditEvents1701635835330]\nexport const DataStoreDigitalCredentialMigrations = [CreateDigitalCredential1708525189000]\nexport const DataStoreMachineStateMigrations = [CreateMachineStateStore1708098041262]\nexport const DataStorePresentationDefinitionMigrations = [CreatePresentationDefinitions1716533767523, CreateDcqlQueryItem1726617600000]\n\n// All migrations together\nexport const DataStoreMigrations = [\n ...DataStoreContactMigrations,\n ...DataStoreIssuanceBrandingMigrations,\n ...DataStoreStatusListMigrations,\n ...DataStoreEventLoggerMigrations,\n ...DataStoreDigitalCredentialMigrations,\n ...DataStoreMachineStateMigrations,\n ...DataStorePresentationDefinitionMigrations,\n]\n","import { defaultHasher } from '@sphereon/ssi-sdk.core'\nimport type { AddCredentialArgs, DigitalCredential, NonPersistedDigitalCredential } from '@sphereon/ssi-sdk.data-store-types'\nimport { CredentialDocumentFormat, DocumentType, RegulationType } from '@sphereon/ssi-sdk.data-store-types'\nimport {\n CredentialMapper,\n DocumentFormat,\n type IVerifiableCredential,\n type IVerifiablePresentation,\n ObjectUtils,\n type OriginalVerifiableCredential,\n type OriginalVerifiablePresentation,\n type SdJwtDecodedVerifiableCredentialPayload,\n} from '@sphereon/ssi-types'\nimport { computeEntryHash } from '@veramo/utils'\nimport { DigitalCredentialEntity } from '../../entities/digitalCredential/DigitalCredentialEntity'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nfunction determineDocumentType(raw: string): DocumentType {\n const rawDocument = parseRawDocument(raw)\n if (!rawDocument) {\n throw new Error(`Couldn't parse the credential: ${raw}`)\n }\n\n const hasProof = CredentialMapper.hasProof(rawDocument)\n const isCredential = isHex(raw) || ObjectUtils.isBase64(raw) || CredentialMapper.isCredential(rawDocument)\n const isPresentation = CredentialMapper.isPresentation(rawDocument)\n\n if (isCredential) {\n return hasProof || isHex(raw) || ObjectUtils.isBase64(raw) ? DocumentType.VC : DocumentType.C\n } else if (isPresentation) {\n return hasProof ? DocumentType.VP : DocumentType.P\n }\n throw new Error(`Couldn't determine the type of the credential: ${raw}`)\n}\n\nexport function isHex(input: string) {\n return input.match(/^([0-9A-Fa-f])+$/g) !== null\n}\n\nexport function parseRawDocument(raw: string): OriginalVerifiableCredential | OriginalVerifiablePresentation {\n if (isHex(raw) || ObjectUtils.isBase64(raw)) {\n // mso_mdoc\n return raw\n } else if (CredentialMapper.isJwtEncoded(raw) || CredentialMapper.isSdJwtEncoded(raw)) {\n return raw\n }\n try {\n return JSON.parse(raw)\n } catch (e) {\n throw new Error(`Can't parse the raw credential: ${raw}`)\n }\n}\n\nfunction determineCredentialDocumentFormat(documentFormat: DocumentFormat): CredentialDocumentFormat {\n switch (documentFormat) {\n case DocumentFormat.JSONLD:\n return CredentialDocumentFormat.JSON_LD\n case DocumentFormat.JWT:\n return CredentialDocumentFormat.JWT\n case DocumentFormat.SD_JWT_VC:\n return CredentialDocumentFormat.SD_JWT\n case DocumentFormat.MSO_MDOC:\n return CredentialDocumentFormat.MSO_MDOC\n default:\n throw new Error(`Not supported document format: ${documentFormat}`)\n }\n}\n\nfunction getValidUntil(uniformDocument: IVerifiableCredential | IVerifiablePresentation | SdJwtDecodedVerifiableCredentialPayload): Date | undefined {\n if ('expirationDate' in uniformDocument && uniformDocument.expirationDate) {\n return new Date(uniformDocument.expirationDate)\n } else if ('validUntil' in uniformDocument && uniformDocument.validUntil) {\n return new Date(uniformDocument.validUntil)\n } else if ('exp' in uniformDocument && uniformDocument.exp) {\n return new Date(uniformDocument.exp * 1000)\n }\n return undefined\n}\n\nfunction getValidFrom(uniformDocument: IVerifiableCredential | IVerifiablePresentation | SdJwtDecodedVerifiableCredentialPayload): Date | undefined {\n if ('issuanceDate' in uniformDocument && uniformDocument.issuanceDate) {\n return new Date(uniformDocument.issuanceDate)\n } else if ('validFrom' in uniformDocument && uniformDocument.validFrom) {\n return new Date(uniformDocument['validFrom'])\n } else if ('nbf' in uniformDocument && uniformDocument.nbf) {\n return new Date(uniformDocument['nbf'] * 1000)\n } else if ('iat' in uniformDocument && uniformDocument.iat) {\n return new Date(uniformDocument['iat'] * 1000)\n }\n return undefined\n}\n\nconst safeStringify = (object: any): string => {\n if (typeof object === 'string') {\n return object\n }\n return JSON.stringify(object)\n}\n\nexport const nonPersistedDigitalCredentialEntityFromAddArgs = (addCredentialArgs: AddCredentialArgs): NonPersistedDigitalCredential => {\n const documentType: DocumentType = determineDocumentType(addCredentialArgs.rawDocument)\n const documentFormat: DocumentFormat = CredentialMapper.detectDocumentType(addCredentialArgs.rawDocument)\n const hasher = addCredentialArgs?.opts?.hasher ?? defaultHasher\n if (documentFormat === DocumentFormat.SD_JWT_VC && !addCredentialArgs.opts?.hasher) {\n throw new Error('No hasher function is provided for SD_JWT credential.')\n }\n const uniformDocument =\n documentType === DocumentType.VC || documentType === DocumentType.C\n ? CredentialMapper.toUniformCredential(addCredentialArgs.rawDocument, { hasher })\n : CredentialMapper.toUniformPresentation(addCredentialArgs.rawDocument, { hasher })\n const validFrom: Date | undefined = getValidFrom(uniformDocument)\n const validUntil: Date | undefined = getValidUntil(uniformDocument)\n const hash = computeEntryHash(addCredentialArgs.rawDocument)\n const regulationType = addCredentialArgs.regulationType ?? RegulationType.NON_REGULATED\n return {\n ...addCredentialArgs,\n regulationType,\n documentType,\n documentFormat: determineCredentialDocumentFormat(documentFormat),\n createdAt: new Date(),\n credentialId: uniformDocument.id ?? hash,\n hash,\n uniformDocument: safeStringify(uniformDocument),\n validFrom,\n ...(validUntil && { validUntil }),\n lastUpdatedAt: new Date(),\n }\n}\n\nexport const digitalCredentialFrom = (credentialEntity: DigitalCredentialEntity): DigitalCredential => {\n const result: DigitalCredential = {\n ...credentialEntity,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const digitalCredentialsFrom = (credentialEntities: Array<DigitalCredentialEntity>): DigitalCredential[] => {\n return credentialEntities.map((credentialEntity) => digitalCredentialFrom(credentialEntity))\n}\n"],"mappings":"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","names":["BaseEntity","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","TableInheritance","ConnectionType","BaseEntity","Column","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","typeOrmDateTime","IdentityOrigin","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","JoinColumn","ManyToOne","OneToMany","OneToOne","PrimaryGeneratedColumn","UpdateDateColumn","getConstraint","validation","children","length","constraints","CorrelationIdentifierType","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","CorrelationIdentifierEntity","BaseEntity","id","type","correlationId","ownerId","tenantId","identity","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","enum","CorrelationIdentifierType","nullable","unique","IdentityEntity","identifier","onDelete","typeOrmDateTime","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","ManyToOne","PrimaryGeneratedColumn","IdentityMetadataItemEntity","BaseEntity","id","label","valueType","stringValue","numberValue","dateValue","boolValue","identity","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","type","typeOrmDateTime","IdentityEntity","metadata","cascade","onDelete","typeOrmDateTime","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","JoinColumn","ManyToOne","OneToMany","OneToOne","PrimaryGeneratedColumn","UpdateDateColumn","typeOrmDateTime","BaseEntity","BeforeInsert","BeforeUpdate","CreateDateColumn","Entity","JoinColumn","OneToMany","OneToOne","PrimaryGeneratedColumn","TableInheritance","UpdateDateColumn","typeOrmDateTime","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","ManyToOne","PrimaryGeneratedColumn","ContactMetadataItemEntity","BaseEntity","id","label","valueType","stringValue","numberValue","dateValue","boolValue","contact","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","type","typeOrmDateTime","BaseContactEntity","metadata","cascade","onDelete","BaseContactEntity","BaseEntity","id","createdAt","lastUpdatedAt","party","metadata","updateUpdatedDate","Date","name","nullable","type","typeOrmDateTime","PartyEntity","contact","onDelete","ContactMetadataItemEntity","cascade","eager","column","typeOrmDateTime","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","ManyToOne","PrimaryGeneratedColumn","UpdateDateColumn","ElectronicAddressEntity","BaseEntity","id","type","electronicAddress","party","partyId","ownerId","tenantId","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","PartyEntity","electronicAddresses","onDelete","typeOrmDateTime","typeOrmDateTime","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","JoinColumn","ManyToOne","PrimaryGeneratedColumn","UpdateDateColumn","PartyRelationshipEntity","id","left","leftId","right","rightId","ownerId","tenantId","createdAt","lastUpdatedAt","updateUpdatedDate","Date","checkRelationshipSides","Promise","reject","Error","PartyEntity","nullable","onDelete","name","type","typeOrmDateTime","unique","typeOrmDateTime","PartyOrigin","PartyTypeType","IsNotEmpty","Validate","validate","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","OneToMany","PrimaryGeneratedColumn","UpdateDateColumn","ValidatorConstraint","IsNonEmptyStringConstraint","validate","value","args","isEmptyString","defaultMessage","property","name","async","trim","length","PartyTypeEntity","id","type","origin","name","description","tenantId","parties","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","enum","PartyTypeType","nullable","PartyOrigin","unique","PartyEntity","party","partyType","typeOrmDateTime","typeOrmDateTime","IsNotEmpty","Validate","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","ManyToOne","PrimaryGeneratedColumn","UpdateDateColumn","PhysicalAddressEntity","BaseEntity","id","type","streetName","streetNumber","postalCode","cityName","provinceName","countryCode","buildingName","ownerId","tenantId","party","partyId","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","PartyEntity","physicalAddresses","onDelete","typeOrmDateTime","PartyEntity","BaseEntity","id","uri","ownerId","tenantId","identities","electronicAddresses","physicalAddresses","partyType","contact","relationships","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","IdentityEntity","identity","party","cascade","onDelete","eager","ElectronicAddressEntity","electronicAddress","PhysicalAddressEntity","physicalAddress","PartyTypeEntity","contactType","parties","BaseContactEntity","PartyRelationshipEntity","relationship","left","type","typeOrmDateTime","IdentityEntity","BaseEntity","id","alias","origin","ownerId","tenantId","roles","identifier","connection","metadata","createdAt","lastUpdatedAt","party","partyId","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","unique","enum","IdentityOrigin","CorrelationIdentifierEntity","identity","cascade","onDelete","eager","ConnectionEntity","IdentityMetadataItemEntity","type","typeOrmDateTime","PartyEntity","identities","ConnectionEntity","BaseEntity","id","type","tenantId","ownerId","config","identity","name","enum","ConnectionType","nullable","BaseConfigEntity","connection","cascade","onDelete","eager","IdentityEntity","BaseConfigEntity","BaseEntity","id","connection","ConnectionEntity","config","cascade","onDelete","name","column","type","ChildEntity","Column","DidAuthConfigEntity","BaseConfigEntity","identifier","redirectUrl","sessionId","ownerId","tenantId","name","length","nullable","IsNotEmpty","validate","Validate","BeforeInsert","BeforeUpdate","ChildEntity","Column","NaturalPersonEntity","BaseContactEntity","firstName","middleName","lastName","displayName","ownerId","tenantId","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","unique","ChildEntity","Column","OpenIdConfigEntity","BaseConfigEntity","clientId","clientSecret","scopes","issuer","redirectUrl","dangerouslyAllowInsecureHttpRequests","clientAuthMethod","ownerId","tenantId","name","length","nullable","IsNotEmpty","validate","BeforeInsert","BeforeUpdate","ChildEntity","Column","OrganizationEntity","BaseContactEntity","legalName","displayName","ownerId","tenantId","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","unique","typeormDate","typeOrmDateTime","CredentialCorrelationType","CredentialDocumentFormat","CredentialStateType","DocumentType","RegulationType","CredentialRole","BaseEntity","Column","CreateDateColumn","Entity","PrimaryGeneratedColumn","UpdateDateColumn","DigitalCredentialEntity","BaseEntity","id","parentId","documentType","regulationType","documentFormat","credentialRole","rawDocument","uniformDocument","credentialId","hash","kmsKeyRef","identifierMethod","issuerCorrelationType","subjectCorrelationType","rpCorrelationType","isIssuerSigned","issuerCorrelationId","subjectCorrelationId","rpCorrelationId","verifiedState","tenantId","createdAt","presentedAt","lastUpdatedAt","validUntil","validFrom","verifiedAt","revokedAt","name","nullable","enum","DocumentType","RegulationType","CredentialDocumentFormat","CredentialRole","unique","CredentialCorrelationType","CredentialStateType","type","typeOrmDateTime","typeormDate","typeOrmDateTime","CredentialType","PartyCorrelationType","ActionType","InitiatorType","LoggingEventType","LogLevel","SubSystem","System","SystemCorrelationIdType","BaseEntity","Column","CreateDateColumn","Entity","PrimaryGeneratedColumn","UpdateDateColumn","AuditEventEntity","BaseEntity","id","timestamp","type","level","correlationId","system","subSystemType","actionType","actionSubType","initiatorType","systemCorrelationIdType","systemCorrelationId","systemAlias","partyCorrelationType","partyCorrelationId","partyAlias","description","credentialType","credentialHash","parentCredentialHash","originalCredential","sharePurpose","data","diagnosticData","createdAt","lastUpdatedAt","name","nullable","unique","typeOrmDateTime","enum","LoggingEventType","LogLevel","System","SubSystem","ActionType","InitiatorType","SystemCorrelationIdType","PartyCorrelationType","CredentialType","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","BaseEntity","Column","Entity","PrimaryGeneratedColumn","ImageDimensionsEntity","BaseEntity","id","width","height","name","nullable","unique","ImageAttributesEntity","BaseEntity","id","uri","dataUri","mediaType","alt","dimensions","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","ImageDimensionsEntity","cascade","onDelete","eager","BackgroundAttributesEntity","BaseEntity","id","color","image","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","ImageAttributesEntity","cascade","onDelete","eager","typeOrmDateTime","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","TableInheritance","UpdateDateColumn","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","PrimaryGeneratedColumn","TextAttributesEntity","BaseEntity","id","color","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","BaseLocaleBrandingEntity","BaseEntity","id","alias","locale","logo","description","background","text","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","ImageAttributesEntity","cascade","onDelete","eager","BackgroundAttributesEntity","TextAttributesEntity","type","typeOrmDateTime","column","typeOrmDateTime","ArrayMinSize","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","OneToMany","PrimaryGeneratedColumn","UpdateDateColumn","ChildEntity","Column","Index","JoinColumn","ManyToOne","OneToMany","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","Index","ManyToOne","PrimaryGeneratedColumn","CredentialClaimsEntity","BaseEntity","id","key","name","credentialLocaleBranding","validate","validation","length","Promise","reject","Error","Object","values","constraints","nullable","unique","message","CredentialLocaleBrandingEntity","claims","cascade","onDelete","CredentialLocaleBrandingEntity","BaseLocaleBrandingEntity","credentialBranding","claims","credentialBrandingId","CredentialBrandingEntity","localeBranding","onDelete","name","CredentialClaimsEntity","credentialLocaleBranding","cascade","eager","nullable","unique","CredentialBrandingEntity","BaseEntity","id","vcHash","issuerCorrelationId","localeBranding","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","CredentialLocaleBrandingEntity","credentialLocaleBrandingEntity","credentialBranding","cascade","onDelete","eager","type","typeOrmDateTime","typeOrmDateTime","ArrayMinSize","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","OneToMany","PrimaryGeneratedColumn","UpdateDateColumn","Validate","ChildEntity","Column","Index","JoinColumn","ManyToOne","IssuerLocaleBrandingEntity","BaseLocaleBrandingEntity","issuerBranding","clientUri","tosUri","policyUri","contacts","issuerBrandingId","IssuerBrandingEntity","localeBranding","onDelete","name","nullable","unique","message","IssuerBrandingEntity","BaseEntity","id","issuerCorrelationId","localeBranding","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","IssuerLocaleBrandingEntity","issuerLocaleBrandingEntity","issuerBranding","cascade","onDelete","eager","type","typeOrmDateTime","typeOrmDateTime","BaseEntity","Column","CreateDateColumn","Entity","PrimaryColumn","UpdateDateColumn","MachineStateInfoEntity","BaseEntity","instanceId","sessionId","machineName","latestStateName","latestEventType","state","createdAt","updatedAt","updatedCount","expiresAt","completedAt","tenantId","name","type","nullable","typeOrmDateTime","typeOrmDateTime","BaseEntity","Column","CreateDateColumn","Entity","PrimaryColumn","UpdateDateColumn","Oid4vcStateEntity","BaseEntity","id","lookups","stateId","correlationId","state","createdAt","updatedAt","expiresAt","tenantId","name","type","nullable","typeOrmDateTime","typeOrmDateTime","IsNotEmpty","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","PrimaryGeneratedColumn","UpdateDateColumn","DcqlQueryItemEntity","BaseEntity","id","queryId","version","tenantId","purpose","name","query","createdAt","lastUpdatedAt","updateUpdatedDate","Date","length","type","nullable","unique","message","typeOrmDateTime","ChildEntity","Column","Validate","BaseEntity","Column","Entity","JoinColumn","ManyToOne","PrimaryColumn","TableInheritance","typeOrmDateTime","StatusListCredentialIdMode","StatusListDriverType","StatusListType","BaseEntity","ChildEntity","Column","Entity","OneToMany","PrimaryColumn","TableInheritance","Unique","StatusListEntity","BaseEntity","id","correlationId","length","type","issuer","driverType","credentialIdMode","proofFormat","statusListCredential","name","nullable","unique","enum","StatusListType","transformer","from","value","trim","startsWith","JSON","parse","to","stringify","StatusListDriverType","default","AGENT_TYPEORM","StatusListCredentialIdMode","ISSUANCE","column","StatusList2021Entity","indexingDirection","statusPurpose","statusListEntries","StatusListEntryEntity","entry","statusList","StatusList2021","OAuthStatusListEntity","bitsPerStatus","expiresAt","typeOrmDateTime","OAuthStatusList","BitstringStatusListEntity","validFrom","validUntil","ttl","includes","split","map","v","Array","isArray","join","BitstringStatusListEntryEntity","BitstringStatusList","StatusListEntryEntity","BaseEntity","statusListId","statusListIndex","statusList","credentialId","credentialHash","entryCorrelationId","value","name","type","nullable","unique","message","StatusList2021Entity","statusListEntries","length","column","BitstringStatusListEntryEntity","StatusListEntryEntity","statusPurpose","bitsPerStatus","statusMessage","statusReference","type","name","nullable","default","transformer","from","value","undefined","JSON","parse","to","stringify","startsWith","Array","isArray","AbstractContactStore","ConnectionType","CorrelationIdentifierType","PartyTypeType","Debug","In","replaceNullWithUndefined","obj","undefined","Date","Array","isArray","map","value","result","key","hasOwnProperty","partyEntityFrom","party","partyEntity","PartyEntity","uri","identities","map","identity","identityEntityFrom","electronicAddresses","electronicAddress","electronicAddressEntityFrom","physicalAddresses","physicalAddress","physicalAddressEntityFrom","partyType","partyTypeEntityFrom","contact","contactEntityFrom","ownerId","tenantId","partyFrom","result","id","roles","Set","flatMap","identityFrom","electronicAddressFrom","physicalAddressFrom","relationships","relationship","partyRelationshipFrom","partyTypeFrom","contactFrom","createdAt","lastUpdatedAt","replaceNullWithUndefined","isNaturalPerson","naturalPersonEntityFrom","isOrganization","organizationEntityFrom","Error","naturalPersonFrom","organizationFrom","connectionEntityFrom","connection","connectionEntity","ConnectionEntity","type","config","configEntityFrom","connectionFrom","configFrom","isOpenIdConfig","openIdConfigEntityFrom","isDidAuthConfig","didAuthConfigEntityFrom","correlationIdentifierEntityFrom","identifier","identifierEntity","CorrelationIdentifierEntity","correlationId","correlationIdentifierFrom","undefined","idOpts","did","method","didAuthConfig","DidAuthConfigEntity","redirectUrl","sessionId","electronicAddressEntity","ElectronicAddressEntity","physicalAddressEntity","PhysicalAddressEntity","streetName","streetNumber","postalCode","cityName","provinceName","countryCode","buildingName","entity","identityEntity","IdentityEntity","alias","origin","metadata","identityMetadataItemEntityFrom","filter","item","metadataItemFrom","metadataItemEntityFrom","EntityClass","label","value","metadataItemEntity","valueType","stringValue","numberValue","boolValue","Object","prototype","toString","call","slice","Date","dateValue","IdentityMetadataItemEntity","contactMetadataItemEntityFrom","ContactMetadataItemEntity","naturalPerson","naturalPersonEntity","NaturalPersonEntity","firstName","middleName","lastName","displayName","openIdConfig","OpenIdConfigEntity","clientId","clientSecret","scopes","issuer","dangerouslyAllowInsecureHttpRequests","clientAuthMethod","organization","organizationEntity","OrganizationEntity","legalName","partyRelationshipEntityFrom","partyRelationshipEntity","PartyRelationshipEntity","leftId","rightId","args","partyTypeEntity","PartyTypeEntity","name","description","openIdConfigFrom","didAuthConfigFrom","stateId","debug","Debug","ContactStore","AbstractContactStore","dbConnection","getParty","args","partyId","result","getRepository","PartyEntity","findOne","where","id","Promise","reject","Error","partyFrom","getParties","filter","partyRepository","filterConditions","buildFilters","initialResult","find","select","In","map","party","length","addParty","identities","contact","partyType","hasCorrectPartyType","type","identity","identifier","CorrelationIdentifierType","URL","connection","hasCorrectConnectionConfig","config","partyEntity","partyEntityFrom","createdResult","save","updateParty","updatedParty","relationships","electronicAddresses","updatedResult","transaction","removeParty","findOneById","then","deleteIdentities","deleteElectronicAddresses","deletePhysicalAddresses","physicalAddresses","delete","catch","error","partyContactRepository","BaseContactEntity","getIdentity","identityId","IdentityEntity","identityFrom","getIdentities","identityRepository","addIdentity","identityEntity","identityEntityFrom","updateIdentity","removeIdentity","addRelationship","leftId","rightId","assertRelationshipSides","relationship","partyRelationshipEntityFrom","PartyRelationshipEntity","partyRelationshipFrom","getRelationship","relationshipId","getRelationships","partyRelationshipRepository","partyRelationship","updateRelationship","removeRelationship","addPartyType","partyTypeEntityFrom","PartyTypeEntity","partyTypeFrom","getPartyType","partyTypeId","getPartyTypes","partyTypeRepository","updatePartyType","removePartyType","parties","getElectronicAddress","electronicAddressId","ElectronicAddressEntity","electronicAddressFrom","getElectronicAddresses","electronicAddressRepository","electronicAddress","addElectronicAddress","electronicAddressEntity","electronicAddressEntityFrom","updateElectronicAddress","removeElectronicAddress","getPhysicalAddress","physicalAddressId","PhysicalAddressEntity","physicalAddressFrom","getPhysicalAddresses","physicalAddressRepository","physicalAddress","addPhysicalAddress","physicalAddressEntity","physicalAddressEntityFrom","updatePhysicalAddress","removePhysicalAddress","ConnectionType","OPENID_CONNECT","isOpenIdConfig","SIOPv2","isDidAuthConfig","PartyTypeType","NATURAL_PERSON","isNaturalPerson","ORGANIZATION","isOrganization","correlationIdentifierRepository","CorrelationIdentifierEntity","baseConfigRepository","BaseConfigEntity","connectionRepository","ConnectionEntity","identityMetadataItemRepository","IdentityMetadataItemEntity","metadata","metadataItem","leftParty","rightParty","condition","processCondition","conditionObject","Object","keys","forEach","key","value","buildMetadataCondition","metadataCondition","label","stringValue","numberValue","boolValue","Date","dateValue","prototype","toString","call","slice","AbstractDigitalCredentialStore","CredentialStateType","CredentialRole","Debug","parseAndValidateOrderOptions","order","orderPairs","split","map","pair","trim","orderOptions","forEach","field","direction","dir","toUpperCase","Error","debug","Debug","DigitalCredentialStore","AbstractDigitalCredentialStore","dbConnection","dcRepo","addCredential","args","credentialEntity","nonPersistedDigitalCredentialEntityFromAddArgs","validationError","assertValidDigitalCredential","Promise","reject","getRepository","createdResult","save","resolve","digitalCredentialFrom","getCredential","result","findOne","where","Error","JSON","stringify","getCredentials","filter","offset","limit","order","sortOptions","parseAndValidateOrderOptions","total","findAndCount","skip","take","data","digitalCredentialsFrom","removeCredential","query","id","hash","affected","deleteTree","error","console","findResult","findBy","dc","parentId","delete","undefined","DigitalCredentialEntity","updateCredentialState","credentialRepository","whereClause","verifiedState","CredentialStateType","REVOKED","revokedAt","verifiedAt","credential","updatedCredential","identifierMethod","lastUpdatedAt","Date","updatedResult","transaction","kmsKeyRef","credentialRole","isIssuerSigned","isRoleInvalid","CredentialRole","ISSUER","HOLDER","missingFields","push","fields","join","AbstractIssuanceBrandingStore","Debug","In","Not","credentialBrandingFrom","credentialBranding","result","localeBranding","map","localeBrandingFrom","replaceNullWithUndefined","issuerBrandingFrom","issuerBranding","locale","undefined","issuerLocaleBrandingEntityFrom","args","issuerLocaleBrandingEntity","IssuerLocaleBrandingEntity","alias","isEmptyString","logo","imageAttributesEntityFrom","description","background","backgroundAttributesEntityFrom","text","textAttributesEntityFrom","clientUri","tosUri","policyUri","contacts","backgroundAttributesEntity","BackgroundAttributesEntity","color","image","credentialBrandingEntityFrom","credentialBrandingEntity","CredentialBrandingEntity","issuerCorrelationId","vcHash","credentialLocaleBrandingEntityFrom","credentialLocaleBrandingEntity","CredentialLocaleBrandingEntity","claims","claim","credentialClaimsEntityFrom","imageAttributesEntity","ImageAttributesEntity","uri","dataUri","mediaType","alt","dimensions","imageDimensionsEntityFrom","imageDimensionsEntity","ImageDimensionsEntity","width","height","issuerBrandingEntityFrom","issuerBrandingEntity","IssuerBrandingEntity","textAttributesEntity","TextAttributesEntity","credentialClaimsEntity","CredentialClaimsEntity","key","name","debug","Debug","IssuanceBrandingStore","AbstractIssuanceBrandingStore","dbConnection","addCredentialBranding","args","localeBranding","vcHash","repository","getRepository","CredentialBrandingEntity","result","findOne","where","Promise","reject","Error","hasDuplicateLocales","credentialBrandingEntity","credentialBrandingEntityFrom","createdResult","save","credentialBrandingFrom","getCredentialBranding","filter","forEach","locale","undefined","find","map","credentialBranding","removeCredentialBranding","localeBrandingDeletions","removeLocaleBranding","all","credentialBrandingDeletions","delete","updateCredentialBranding","id","branding","transaction","addCredentialLocaleBranding","credentialBrandingId","credentialBrandingRepository","locales","CredentialLocaleBrandingEntity","In","length","credentialLocaleBrandingEntity","credentialLocaleBrandingRepository","credentialLocaleBrandingEntityFrom","getCredentialLocaleBranding","credentialBrandingLocale","credentialLocaleBranding","localeBrandingFrom","removeCredentialLocaleBranding","updateCredentialLocaleBranding","Not","updatedResult","addIssuerBranding","issuerCorrelationId","IssuerBrandingEntity","issuerBrandingEntity","issuerBrandingEntityFrom","issuerBrandingFrom","getIssuerBranding","issuerBranding","removeIssuerBranding","issuerBrandingDeletions","updateIssuerBranding","addIssuerLocaleBranding","issuerBrandingId","issuerBrandingRepository","IssuerLocaleBrandingEntity","issuerLocaleBrandingEntity","issuerLocaleBrandingRepository","issuerLocaleBrandingEntityFrom","getIssuerLocaleBranding","issuerLocaleBranding","removeIssuerLocaleBranding","updateIssuerLocaleBranding","seen","Set","some","size","add","background","image","dimensions","ImageDimensionsEntity","ImageAttributesEntity","BackgroundAttributesEntity","logo","text","TextAttributesEntity","StatusListType","Debug","In","StatusListType","statusListEntityFrom","args","type","StatusListType","StatusList2021","entity","StatusList2021Entity","sl2021","indexingDirection","statusPurpose","setBaseFields","Object","defineProperty","value","enumerable","configurable","OAuthStatusList","OAuthStatusListEntity","oauthSl","bitsPerStatus","expiresAt","BitstringStatusList","BitstringStatusListEntity","bitstringsl","Error","validFrom","validUntil","ttl","statusListFrom","result","getBaseFields","replaceNullWithUndefined","id","correlationId","length","issuer","driverType","credentialIdMode","proofFormat","statusListCredential","debug","Debug","StatusListStore","_dbConnection","dbConnection","availableStatusListEntries","args","statusListIndex","Array","isArray","statusList","getStatusList","id","statusListId","repo","getStatusListEntryRepo","type","results","find","where","In","map","index","filter","includes","addStatusListEntry","Error","save","updateStatusListEntry","result","getStatusListEntryByIndex","errorOnNotFound","updatedEntry","updStatusListId","updateResult","upsert","conflictPaths","statusListCorrelationId","entryCorrelationId","correlationId","findOne","relations","undefined","getStatusListEntryByCredentialId","credentialId","JSON","stringify","removeStatusListEntryByCredentialId","error","delete","affected","removeStatusListEntryByIndex","console","getStatusListEntries","getStatusListEntity","push","getStatusListRepo","entity","statusListFrom","getStatusLists","addStatusList","statusListEntityFrom","createdResult","updateStatusList","updatedResult","transaction","removeStatusList","deletedEntity","remove","Boolean","getDS","dataSource","StatusListType","StatusList2021","getRepository","StatusList2021Entity","OAuthStatusList","OAuthStatusListEntity","BitstringStatusList","BitstringStatusListEntity","StatusListEntity","BitstringStatusListEntryEntity","StatusListEntryEntity","AbstractEventLoggerStore","AbstractEventLoggerStore","LoggingEventType","Debug","LoggingEventType","auditEventFrom","event","result","id","type","LoggingEventType","AUDIT","description","timestamp","level","correlationId","actionType","actionSubType","initiatorType","partyAlias","partyCorrelationId","partyCorrelationType","subSystemType","system","systemAlias","systemCorrelationId","systemCorrelationIdType","data","JSON","parse","diagnosticData","replaceNullWithUndefined","auditEventEntityFrom","args","auditEventEntity","AuditEventEntity","stringify","activityEventFrom","ACTIVITY","credentialType","originalCredential","credentialHash","parentCredentialHash","sharePurpose","activityEventEntityFrom","activityEventEntity","debug","Debug","EventLoggerStore","AbstractEventLoggerStore","dbConnection","getAuditEvents","args","filter","auditEventsFilter","map","item","type","LoggingEventType","AUDIT","length","push","connection","result","getRepository","AuditEventEntity","find","where","event","auditEventFrom","storeAuditEvent","auditEventEntity","auditEventEntityFrom","createdResult","save","getActivityEvents","activityEventsFilter","ACTIVITY","activityEventFrom","storeActivityEvent","activityEventEntity","activityEventEntityFrom","IAbstractMachineStateStore","Debug","Brackets","IsNull","LessThan","Not","debug","Debug","MachineStateStore","IAbstractMachineStateStore","_dbConnection","dbConnection","persistMachineState","state","connection","machineName","instanceId","tenantId","entity","machineStateInfoEntityFrom","existing","getRepository","MachineStateInfoEntity","findOne","where","updatedCount","error","updatedAt","Date","console","log","Promise","reject","Error","result","save","transaction","machineInfoFrom","findActiveMachineStates","args","queryBuilder","createQueryBuilder","andWhere","Brackets","qb","orWhere","now","orderBy","getMany","then","entities","map","findMachineStates","find","filter","event","getMachineState","findOneOrFail","deleteMachineState","delete","affected","deleteExpiredMachineStates","deleteDoneStates","JSON","stringify","deleteCriteria","expiresAt","LessThan","completedAt","Not","IsNull","machineStateInfoEntity","parse","machineStateInfo","Object","assign","AbstractPDStore","Debug","In","blakepkg","DcqlQuery","dcqlQueryItemFrom","entity","result","id","tenantId","queryId","version","name","purpose","query","DcqlQuery","parse","JSON","createdAt","lastUpdatedAt","validate","replaceNullWithUndefined","dcqlQueryEntityItemFrom","item","DcqlQueryItemEntity","dcqlQuery","stringify","hashPayload","payload","blake2bHex","isPresentationDefinitionEqual","base","compare","debug","Debug","PDStore","AbstractPDStore","dbConnection","getDefinition","args","itemId","pdRepository","getRepository","DcqlQueryItemEntity","result","findOne","where","id","Promise","reject","Error","dcqlQueryItemFrom","hasDefinition","resultCount","count","hasDefinitions","filter","cleanFilter","getDefinitions","initialResult","findIds","find","In","map","entity","order","version","addDefinition","item","dcqlQueryEntityItemFrom","save","transaction","updateDefinition","updatedEntity","tenantId","queryId","name","purpose","query","JSON","stringify","updateResult","deleteDefinition","delete","deleteDefinitions","length","idFilters","f","undefined","cleanedItem","key","value","Debug","enablePostgresUuidExtension","CreateContacts1659463079428","name","up","queryRunner","enablePostgresUuidExtension","query","down","CreateContacts1659463069549","name","up","queryRunner","query","down","debug","Debug","CreateContacts1659463079429","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateContacts1659463079428","CreateContacts1659463069549","Promise","reject","down","Debug","CreatePresentationDefinitions1716475165345","name","up","queryRunner","query","down","CreatePresentationDefinitions1716475165344","name","up","queryRunner","query","down","debug","Debug","CreatePresentationDefinitions1716533767523","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreatePresentationDefinitions1716475165345","CreatePresentationDefinitions1716475165344","Promise","reject","down","Debug","enablePostgresUuidExtension","CreateIssuanceBranding1685628974232","name","up","queryRunner","enablePostgresUuidExtension","query","down","FixCredentialClaimsReferencesUuidPG1741895822987","name","up","queryRunner","query","down","CreateIssuanceBranding1685628973231","name","up","queryRunner","query","down","FixCredentialClaimsReferencesUuidSqlite1741895822987","name","up","queryRunner","query","down","debug","Debug","FixCredentialClaimsReferencesUuid1741895822987","name","up","queryRunner","dbType","connection","driver","options","type","mig","FixCredentialClaimsReferencesUuidPG1741895822987","FixCredentialClaimsReferencesUuidSqlite1741895822987","Promise","reject","down","CreateIssuanceBranding1685628974232","CreateIssuanceBranding1685628973231","Debug","AddBitstringStatusListEnumPG1741895823000","name","up","queryRunner","startTransaction","query","commitTransaction","down","CreateBitstringStatusListPG1741895823000","CreateBitstringStatusListSqlite1741895823001","name","up","queryRunner","query","down","debug","Debug","AddBitstringStatusListEnum1741895823000","name","up","queryRunner","dbType","connection","driver","options","type","mig","AddBitstringStatusListEnumPG1741895823000","Promise","reject","down","CreateBitstringStatusList1741895823000","CreateBitstringStatusListPG1741895823000","CreateBitstringStatusListSqlite1741895823001","Debug","CreateDcqlQueryItemPG1726588800000","name","up","queryRunner","query","down","CreateDcqlQueryItemSQlite1726617600000","name","up","queryRunner","query","down","debug","Debug","CreateDcqlQueryItem1726617600000","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateDcqlQueryItemPG1726588800000","CreateDcqlQueryItemSQlite1726617600000","Promise","reject","down","Debug","debug","Debug","CreateIssuanceBranding1659463079429","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateIssuanceBranding1685628974232","CreateIssuanceBranding1685628973231","Promise","reject","down","Debug","enablePostgresUuidExtension","CreateContacts1690925872592","name","up","queryRunner","enablePostgresUuidExtension","query","down","CreateContacts1690925872693","name","up","queryRunner","query","down","debug","Debug","CreateContacts1690925872318","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateContacts1690925872592","CreateContacts1690925872693","Promise","reject","down","Debug","CreateStatusList1693866470001","name","up","queryRunner","query","down","UpdateStatusList1737110469001","name","up","queryRunner","query","down","CreateStatusList1693866470002","name","up","queryRunner","query","down","UpdateStatusList1737110469000","name","up","queryRunner","query","down","debug","Debug","CreateStatusList1693866470000","name","up","queryRunner","dbType","connection","driver","options","type","createMig","CreateStatusList1693866470001","updateMig","UpdateStatusList1737110469001","CreateStatusList1693866470002","UpdateStatusList1737110469000","Promise","reject","down","Debug","CreateAuditEvents1701634812183","name","up","queryRunner","query","down","CreateAuditEvents1701634819487","name","up","queryRunner","query","down","debug","Debug","CreateAuditEvents1701635835330","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateAuditEvents1701634812183","CreateAuditEvents1701634819487","Promise","reject","down","Debug","CreateDigitalCredential1708525189001","name","up","queryRunner","query","down","CreateDigitalCredential1708525189002","name","up","queryRunner","query","down","debug","Debug","CreateDigitalCredential1708525189000","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateDigitalCredential1708525189001","CreateDigitalCredential1708525189002","Promise","reject","down","Debug","CreateMachineStateStore1708797018115","name","up","queryRunner","query","down","CreateMachineStateStore1708796002272","name","up","queryRunner","query","down","debug","Debug","CreateMachineStateStore1708098041262","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateMachineStateStore1708797018115","CreateMachineStateStore1708796002272","Promise","reject","down","Debug","CreateContacts1710438363001","name","up","queryRunner","query","down","CreateContacts1710438363002","name","up","queryRunner","query","down","debug","Debug","CreateContacts1708525189000","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateContacts1710438363001","CreateContacts1710438363002","Promise","reject","down","Debug","CreateContacts1715761125001","name","up","queryRunner","query","down","CreateContacts1715761125002","name","up","queryRunner","query","down","debug","Debug","CreateContacts1715761125000","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateContacts1715761125001","CreateContacts1715761125002","Promise","reject","down","DataStoreContactMigrations","CreateContacts1659463079429","CreateContacts1690925872318","CreateContacts1708525189000","CreateContacts1715761125000","DataStoreIssuanceBrandingMigrations","CreateIssuanceBranding1659463079429","FixCredentialClaimsReferencesUuid1741895822987","DataStoreStatusListMigrations","CreateStatusList1693866470000","AddBitstringStatusListEnum1741895823000","CreateBitstringStatusList1741895823000","DataStoreEventLoggerMigrations","CreateAuditEvents1701635835330","DataStoreDigitalCredentialMigrations","CreateDigitalCredential1708525189000","DataStoreMachineStateMigrations","CreateMachineStateStore1708098041262","DataStorePresentationDefinitionMigrations","CreatePresentationDefinitions1716533767523","CreateDcqlQueryItem1726617600000","DataStoreMigrations","defaultHasher","CredentialDocumentFormat","DocumentType","RegulationType","CredentialMapper","DocumentFormat","ObjectUtils","computeEntryHash","determineDocumentType","raw","rawDocument","parseRawDocument","Error","hasProof","CredentialMapper","isCredential","isHex","ObjectUtils","isBase64","isPresentation","DocumentType","VC","C","VP","P","input","match","isJwtEncoded","isSdJwtEncoded","JSON","parse","e","determineCredentialDocumentFormat","documentFormat","DocumentFormat","JSONLD","CredentialDocumentFormat","JSON_LD","JWT","SD_JWT_VC","SD_JWT","MSO_MDOC","getValidUntil","uniformDocument","expirationDate","Date","validUntil","exp","undefined","getValidFrom","issuanceDate","validFrom","nbf","iat","safeStringify","object","stringify","nonPersistedDigitalCredentialEntityFromAddArgs","addCredentialArgs","documentType","detectDocumentType","hasher","opts","defaultHasher","toUniformCredential","toUniformPresentation","hash","computeEntryHash","regulationType","RegulationType","NON_REGULATED","createdAt","credentialId","id","lastUpdatedAt","digitalCredentialFrom","credentialEntity","result","replaceNullWithUndefined","digitalCredentialsFrom","credentialEntities","map","DataStoreContactEntities","BaseConfigEntity","ConnectionEntity","PartyEntity","IdentityEntity","IdentityMetadataItemEntity","CorrelationIdentifierEntity","DidAuthConfigEntity","OpenIdConfigEntity","PartyRelationshipEntity","PartyTypeEntity","BaseContactEntity","OrganizationEntity","NaturalPersonEntity","ElectronicAddressEntity","PhysicalAddressEntity","ContactMetadataItemEntity","DataStoreOid4vcStateEntities","Oid4vcStateEntity","DataStoreIssuanceBrandingEntities","BackgroundAttributesEntity","CredentialBrandingEntity","ImageAttributesEntity","ImageDimensionsEntity","BaseLocaleBrandingEntity","IssuerBrandingEntity","TextAttributesEntity","CredentialLocaleBrandingEntity","IssuerLocaleBrandingEntity","CredentialClaimsEntity","DataStorePresentationDefinitionEntities","DcqlQueryItemEntity","DataStoreStatusListEntities","StatusListEntity","StatusList2021Entity","OAuthStatusListEntity","BitstringStatusListEntity","BitstringStatusListEntryEntity","StatusListEntryEntity","DataStoreEventLoggerEntities","AuditEventEntity","DataStoreDigitalCredentialEntities","DigitalCredentialEntity","DataStoreMachineStateEntities","MachineStateInfoEntity","DataStoreEntities"]}
1
+ {"version":3,"sources":["../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/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/index.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/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/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/migrations/generic/index.ts","../src/utils/digitalCredential/MappingUtils.ts"],"sourcesContent":["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: false })\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, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'\n\n//TODO this entity, also contains some optional fields that are related to another event type (Activity) later we might want to refactor and reorganize this.\n// For now I've added a discriminator value called eventType that can be one of the three types of events: 1. General, 2. Audit, and 3. Activity\n@Entity('AuditEvents')\nexport class AuditEventEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column({ name: 'timestamp', nullable: false, unique: false, type: typeOrmDateTime() })\n timestamp!: Date\n\n @Column('simple-enum', { name: 'eventType', enum: LoggingEventType, nullable: false, unique: false })\n type!: LoggingEventType\n\n @Column('simple-enum', { name: 'level', enum: LogLevel, nullable: false, unique: false })\n level!: LogLevel\n\n @Column('text', { name: 'correlationId', nullable: false, unique: false })\n correlationId!: string\n\n @Column('simple-enum', { name: 'system', enum: System, nullable: false, unique: false })\n system!: System\n\n @Column('simple-enum', { name: 'subSystemType', enum: SubSystem, nullable: false, unique: false })\n subSystemType!: SubSystem\n\n @Column('simple-enum', { name: 'actionType', enum: ActionType, nullable: false, unique: false })\n actionType!: ActionType\n\n @Column({ name: 'actionSubType', type: 'varchar', nullable: false, unique: false })\n actionSubType!: ActionSubType\n\n @Column('simple-enum', { name: 'initiatorType', enum: InitiatorType, nullable: false, unique: false })\n initiatorType!: InitiatorType\n\n @Column('simple-enum', { name: 'systemCorrelationIdType', enum: SystemCorrelationIdType, nullable: true, unique: false })\n systemCorrelationIdType?: SystemCorrelationIdType\n\n @Column('text', { name: 'systemCorrelationId', nullable: true, unique: false })\n systemCorrelationId?: string\n\n @Column('text', { name: 'systemAlias', nullable: true, unique: false })\n systemAlias?: string\n\n @Column('simple-enum', { name: 'partyCorrelationType', enum: PartyCorrelationType, nullable: true, unique: false })\n partyCorrelationType?: PartyCorrelationType\n\n @Column('text', { name: 'partyCorrelationId', nullable: true, unique: false })\n partyCorrelationId?: string\n\n @Column('text', { name: 'partyAlias', nullable: true, unique: false })\n partyAlias?: string\n\n @Column('text', { name: 'description', nullable: false, unique: false })\n description!: string\n\n @Column('simple-enum', { name: 'credentialType', enum: CredentialType, nullable: true, unique: false })\n credentialType?: CredentialType\n\n @Column('text', { name: 'credentialHash', nullable: true, unique: false })\n credentialHash?: string\n\n @Column('text', { name: 'parentCredentialHash', nullable: true, unique: false })\n parentCredentialHash?: string\n\n @Column('text', { name: 'originalCredential', nullable: true, unique: false })\n originalCredential?: string\n\n @Column('text', { name: 'sharePurpose', nullable: true, unique: false })\n sharePurpose?: string\n\n @Column('text', { name: 'data', nullable: true, unique: false })\n data?: string\n\n @Column('text', { name: 'diagnosticData', nullable: true, unique: false })\n diagnosticData?: 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","import { validate, Validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { ImageAttributesEntity } from './ImageAttributesEntity'\n\n@Entity('BackgroundAttributes')\nexport class BackgroundAttributesEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'color', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank background colors are not allowed' })\n color?: string\n\n @OneToOne(() => ImageAttributesEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'imageId' })\n image?: ImageAttributesEntity\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { validate, Validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { ImageDimensionsEntity } from './ImageDimensionsEntity'\n\n@Entity('ImageAttributes')\nexport class ImageAttributesEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('text', { name: 'uri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank image uri are not allowed' })\n uri?: string\n\n @Column('text', { name: 'dataUri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank image data uri are not allowed' })\n dataUri?: string\n\n @Column('varchar', { name: 'mediaType', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank image types are not allowed' })\n mediaType?: string\n\n @Column('varchar', { name: 'alt', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank image alts are not allowed' })\n alt?: string\n\n @OneToOne(() => ImageDimensionsEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'dimensionsId' })\n dimensions?: ImageDimensionsEntity\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm'\n\n@Entity('ImageDimensions')\nexport class ImageDimensionsEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('integer', { name: 'width', nullable: false, unique: false })\n width!: number\n\n @Column('integer', { name: 'height', nullable: false, unique: false })\n height!: number\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { validate, Validate, ValidationError } from 'class-validator'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n JoinColumn,\n OneToOne,\n PrimaryGeneratedColumn,\n TableInheritance,\n UpdateDateColumn,\n} from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { BackgroundAttributesEntity } from './BackgroundAttributesEntity'\nimport { ImageAttributesEntity } from './ImageAttributesEntity'\nimport { TextAttributesEntity } from './TextAttributesEntity'\n\n@Entity('BaseLocaleBranding')\n@TableInheritance({ column: { type: 'varchar', name: 'type' } })\nexport class BaseLocaleBrandingEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'alias', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank aliases are not allowed' })\n alias?: string\n\n @Column('varchar', { name: 'locale', length: 255, nullable: false, unique: false })\n locale?: string\n\n @OneToOne(() => ImageAttributesEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'logoId' })\n logo?: ImageAttributesEntity\n\n @Column('varchar', { name: 'description', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank descriptions are not allowed' })\n description?: string\n\n @OneToOne(() => BackgroundAttributesEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'backgroundId' })\n background?: BackgroundAttributesEntity\n\n @OneToOne(() => TextAttributesEntity, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: true,\n })\n @JoinColumn({ name: 'textId' })\n text?: TextAttributesEntity\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<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { validate, Validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, PrimaryGeneratedColumn } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\n\n@Entity('TextAttributes')\nexport class TextAttributesEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'color', length: 255, nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank text colors are not allowed' })\n color?: string\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { ArrayMinSize, IsNotEmpty, validate, ValidationError } from 'class-validator'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n Index,\n OneToMany,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from 'typeorm'\nimport { CredentialLocaleBrandingEntity } from './CredentialLocaleBrandingEntity'\n\n@Entity('CredentialBranding')\n@Index('IDX_CredentialBrandingEntity_vcHash', ['vcHash'])\n@Index('IDX_CredentialBrandingEntity_issuerCorrelationId', ['issuerCorrelationId'])\nexport class CredentialBrandingEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'vcHash', length: 255, nullable: false, unique: true })\n @IsNotEmpty({ message: 'Blank vcHashes are not allowed' })\n vcHash!: string\n\n @Column('varchar', { name: 'issuerCorrelationId', length: 255, nullable: false, unique: false })\n @IsNotEmpty({ message: 'Blank issuerCorrelationIds are not allowed' })\n issuerCorrelationId!: string\n\n @OneToMany(\n () => CredentialLocaleBrandingEntity,\n (credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity) => credentialLocaleBrandingEntity.credentialBranding,\n {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n },\n )\n @ArrayMinSize(1, { message: 'localeBranding cannot be empty' })\n localeBranding!: Array<CredentialLocaleBrandingEntity>\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<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { ChildEntity, Column, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm'\nimport { BaseLocaleBrandingEntity } from './BaseLocaleBrandingEntity'\nimport { CredentialBrandingEntity } from './CredentialBrandingEntity'\nimport { CredentialClaimsEntity } from './CredentialClaimsEntity'\n\n@ChildEntity('CredentialLocaleBranding')\n@Index('IDX_CredentialLocaleBrandingEntity_credentialBranding_locale', ['credentialBranding', 'locale'], { unique: true })\nexport class CredentialLocaleBrandingEntity extends BaseLocaleBrandingEntity {\n @ManyToOne(() => CredentialBrandingEntity, (credentialBranding: CredentialBrandingEntity) => credentialBranding.localeBranding, {\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'credentialBrandingId' })\n credentialBranding!: CredentialBrandingEntity\n\n @OneToMany(() => CredentialClaimsEntity, (claims: CredentialClaimsEntity) => claims.credentialLocaleBranding, {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n })\n @JoinColumn({ name: 'claim_id' })\n claims!: Array<CredentialClaimsEntity>\n\n @Column('uuid', { name: 'credentialBrandingId', nullable: false })\n credentialBrandingId!: string\n}\n","import { validate, Validate, ValidationError } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { CredentialLocaleBrandingEntity } from './CredentialLocaleBrandingEntity'\n\n@Entity('CredentialClaims')\n@Index('IDX_CredentialClaimsEntity_credentialLocaleBranding_locale', ['credentialLocaleBranding', 'key'], { unique: true })\nexport class CredentialClaimsEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'key', length: 255, nullable: false, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank claim keys are not allowed' })\n key!: string\n\n @Column('varchar', { name: 'name', length: 255, nullable: false, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank claim names are not allowed' })\n name!: string\n\n @ManyToOne(() => CredentialLocaleBrandingEntity, (credentialLocaleBranding: CredentialLocaleBrandingEntity) => credentialLocaleBranding.claims, {\n cascade: ['insert', 'update'],\n onDelete: 'CASCADE',\n })\n credentialLocaleBranding!: CredentialLocaleBrandingEntity\n\n @BeforeInsert()\n @BeforeUpdate()\n async validate(): Promise<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { ArrayMinSize, IsNotEmpty, validate, ValidationError } from 'class-validator'\nimport {\n BaseEntity,\n BeforeInsert,\n BeforeUpdate,\n Column,\n CreateDateColumn,\n Entity,\n Index,\n OneToMany,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from 'typeorm'\nimport { IssuerLocaleBrandingEntity } from './IssuerLocaleBrandingEntity'\n\n@Entity('IssuerBranding')\n@Index('IDX_IssuerBrandingEntity_issuerCorrelationId', ['issuerCorrelationId'])\nexport class IssuerBrandingEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column('varchar', { name: 'issuerCorrelationId', length: 255, nullable: false, unique: true })\n @IsNotEmpty({ message: 'Blank issuerCorrelationIds are not allowed' })\n issuerCorrelationId!: string\n\n @OneToMany(\n () => IssuerLocaleBrandingEntity,\n (issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity) => issuerLocaleBrandingEntity.issuerBranding,\n {\n cascade: true,\n onDelete: 'CASCADE',\n eager: true,\n nullable: false,\n },\n )\n @ArrayMinSize(1, { message: 'localeBranding cannot be empty' })\n localeBranding!: Array<IssuerLocaleBrandingEntity>\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<undefined> {\n const validation: Array<ValidationError> = await validate(this)\n if (validation.length > 0) {\n return Promise.reject(Error(Object.values(validation[0].constraints!)[0]))\n }\n return\n }\n}\n","import { Validate } from 'class-validator'\nimport { ChildEntity, Column, Index, JoinColumn, ManyToOne } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { BaseLocaleBrandingEntity } from './BaseLocaleBrandingEntity'\nimport { IssuerBrandingEntity } from './IssuerBrandingEntity'\n\n@ChildEntity('IssuerLocaleBranding')\n@Index('IDX_IssuerLocaleBrandingEntity_issuerBranding_locale', ['issuerBranding', 'locale'], { unique: true })\nexport class IssuerLocaleBrandingEntity extends BaseLocaleBrandingEntity {\n @ManyToOne(() => IssuerBrandingEntity, (issuerBranding: IssuerBrandingEntity) => issuerBranding.localeBranding, {\n onDelete: 'CASCADE',\n })\n @JoinColumn({ name: 'issuerBrandingId' })\n issuerBranding!: IssuerBrandingEntity\n\n @Column('text', { name: 'client_uri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank client uris are not allowed' })\n clientUri?: string\n\n @Column('text', { name: 'tos_uri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank tos uris are not allowed' })\n tosUri?: string\n\n @Column('text', { name: 'policy_uri', nullable: true, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Blank policy uris are not allowed' })\n policyUri?: string\n\n @Column('simple-array', { name: 'contacts', nullable: true, unique: false })\n contacts?: Array<string>\n\n @Column('text', { name: 'issuerBrandingId', nullable: false })\n issuerBrandingId!: string\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { BaseEntity, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from 'typeorm'\n\n/**\n * @class MachineStateInfoEntity\n * Represents a machine state. It allows to continue a machine at a later point in time at the point it was left of\n *\n * @param {string} instanceId - The instance ID of the machine state.\n * @param {string} [sessionId] - The session ID of the machine state. (optional)\n * @param {string} machineName - The name of the machine.\n * @param {string} [latestStateName] - The name of the latest state. (optional)\n * @param {string} latestEventType - The type of the latest event.\n * @param {string} state - The current state of the machine.\n * @param {Date} createdAt - The date and time when the machine state was created.\n * @param {Date} updatedAt - The date and time when the machine state was last updated.\n * @param {number} updatedCount - The number of times the machine state has been updated.\n * @param {Date} [expiresAt] - The date and time when the machine state expires. (optional)\n * @param {Date} [completedAt] - The date and time when the machine state was completed. (optional)\n * @param {string} [tenantId] - The ID of the tenant associated with the machine state. (optional)\n */\n@Entity('MachineStateInfoEntity')\nexport class MachineStateInfoEntity extends BaseEntity {\n @PrimaryColumn({ name: 'instance_id', type: 'varchar', nullable: false })\n instanceId!: string\n\n @Column({ name: 'session_id', type: 'varchar', nullable: true })\n sessionId?: string\n\n // Xstate moved to name instead of instanceId for V5. Also makes more sense\n @Column({ name: 'machine_name', type: 'varchar', nullable: false })\n machineName!: string\n\n @Column({ name: 'latest_state_name', type: 'varchar', nullable: true })\n latestStateName?: string\n\n @Column({ name: 'latest_event_type', type: 'varchar', nullable: false })\n latestEventType!: string\n\n @Column({ name: 'state', type: 'text', nullable: false })\n state!: string\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'updated_at', nullable: false, type: typeOrmDateTime() })\n updatedAt!: Date\n\n @Column({ name: 'updated_count', type: 'integer', nullable: false })\n updatedCount!: number\n\n @Column({ name: 'expires_at', nullable: true, type: typeOrmDateTime() })\n expiresAt?: Date\n\n @Column({ name: 'completed_at', nullable: true, type: typeOrmDateTime() })\n completedAt?: Date\n\n @Column({ name: 'tenant_id', type: 'varchar', nullable: true })\n tenantId?: string\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { BaseEntity, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from 'typeorm'\n\n@Entity('Oid4vcStateEntity')\nexport class Oid4vcStateEntity<StateType> extends BaseEntity {\n @PrimaryColumn({ name: 'id', type: 'varchar', nullable: false })\n id!: string\n\n @Column({ name: 'lookup_ids', type: 'array', nullable: true })\n lookups?: Array<string>\n\n @Column({ name: 'state_id', type: 'varchar', nullable: true })\n stateId?: string\n\n @Column({ name: 'correlation_id', type: 'varchar', nullable: true })\n correlationId?: string\n\n @Column({ name: 'state', type: 'json', nullable: false })\n state!: StateType\n\n @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })\n createdAt!: Date\n\n @UpdateDateColumn({ name: 'updated_at', nullable: false, type: typeOrmDateTime() })\n updatedAt!: Date\n\n @Column({ name: 'expires_at', nullable: true, type: typeOrmDateTime() })\n expiresAt?: Date\n\n @Column({ name: 'tenant_id', type: 'varchar', nullable: true })\n tenantId?: string\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport { IsNotEmpty } from 'class-validator'\nimport { BaseEntity, BeforeInsert, BeforeUpdate, Column, CreateDateColumn, Entity, Index, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'\n\n@Entity('DcqlQueryItem')\n@Index(['version'], { unique: false })\nexport class DcqlQueryItemEntity extends BaseEntity {\n @PrimaryGeneratedColumn('uuid')\n id!: string\n\n @Column({ name: 'query_id', length: 255, type: 'varchar', nullable: false, unique: false })\n @IsNotEmpty({ message: 'A blank query id field is not allowed' })\n queryId!: string\n\n @Column({ name: 'version', length: 255, type: 'varchar', nullable: false, unique: false })\n @IsNotEmpty({ message: 'A blank version field is not allowed' })\n version!: string\n\n @Column({ name: 'tenant_id', length: 255, type: 'varchar', nullable: true, unique: false })\n tenantId?: string\n\n @Column({ name: 'purpose', length: 255, type: 'varchar', nullable: true, unique: false })\n purpose?: string\n\n @Column({ name: 'name', length: 255, type: 'varchar', nullable: true, unique: false })\n name?: string\n\n @Column({ name: 'query', type: 'text', nullable: false, unique: false })\n @IsNotEmpty({ message: 'A blank dcql query payload field is not allowed' })\n query!: 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","import { BitstringStatusMessage } from '../../types'\nimport { ChildEntity, Column } from 'typeorm'\nimport { StatusListEntryEntity } from './StatusList2021EntryEntity'\n\n@ChildEntity('bitstring')\nexport class BitstringStatusListEntryEntity extends StatusListEntryEntity {\n @Column({ type: 'varchar', name: 'statusPurpose', nullable: false })\n statusPurpose!: string\n\n @Column({ type: 'integer', name: 'bitsPerStatus', nullable: true, default: 1 })\n bitsPerStatus?: number\n\n @Column({\n type: 'text',\n name: 'statusMessage',\n nullable: true,\n transformer: {\n from(value: string): Array<BitstringStatusMessage> | undefined {\n if (!value) {\n return undefined\n }\n return JSON.parse(value)\n },\n to(value: Array<BitstringStatusMessage> | undefined): string | undefined {\n if (!value) {\n return undefined\n }\n return JSON.stringify(value)\n },\n },\n })\n statusMessage?: Array<BitstringStatusMessage>\n\n @Column({\n type: 'text',\n name: 'statusReference',\n nullable: true,\n transformer: {\n from(value: string): string | string[] | undefined {\n if (!value) {\n return undefined\n }\n if (value.startsWith('[')) {\n return JSON.parse(value)\n }\n return value\n },\n to(value: string | string[] | undefined): string | undefined {\n if (!value) {\n return undefined\n }\n if (Array.isArray(value)) {\n return JSON.stringify(value)\n }\n return value\n },\n },\n })\n statusReference?: string | string[]\n}\n","import { Validate } from 'class-validator'\nimport { BaseEntity, Column, Entity, JoinColumn, ManyToOne, PrimaryColumn, TableInheritance } from 'typeorm'\nimport { IsNonEmptyStringConstraint } from '../validators'\nimport { StatusList2021Entity, StatusListEntity } from './StatusListEntities'\n\n@Entity('StatusListEntry')\n// @Unique('uq_credential_statuslist', ['statusList', 'credentialId']) // disabled because one prop can be null\n// @Unique('uq_credentialHash_statuslistId', ['statusList', 'credentialHash']) // disabled because one prop can be null\n@TableInheritance({ column: { type: 'varchar', name: 'type' } })\nexport class StatusListEntryEntity extends BaseEntity {\n @PrimaryColumn({ name: 'statusListId', type: 'varchar', nullable: false, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Status list id is required' })\n statusListId!: string\n\n @PrimaryColumn({ name: 'statusListIndex', type: 'integer', nullable: false, unique: false })\n @Validate(IsNonEmptyStringConstraint, { message: 'Status list index is required' })\n statusListIndex!: number\n\n @ManyToOne(() => StatusList2021Entity, (statusList) => statusList.statusListEntries)\n @JoinColumn({ name: 'statusListId' })\n statusList!: StatusListEntity\n\n @Column({ name: 'credentialId', type: 'text', nullable: true })\n credentialId?: string\n\n @Column({ name: 'credentialHash', length: 128, type: 'varchar', nullable: true, unique: false })\n credentialHash?: string\n\n @Column({ name: 'correlationId', length: 255, type: 'varchar', nullable: true, unique: false })\n entryCorrelationId?: string\n\n @Column({ name: 'value', length: 50, type: 'varchar', nullable: true, unique: false })\n value?: string\n}\n","import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'\nimport {\n type CredentialProofFormat,\n type IIssuer,\n type StatusListCredential,\n StatusListCredentialIdMode,\n StatusListDriverType,\n type StatusListIndexingDirection,\n StatusListType,\n type StatusPurpose2021,\n} from '@sphereon/ssi-types'\n\nimport { BaseEntity, ChildEntity, Column, Entity, OneToMany, PrimaryColumn, TableInheritance, Unique } from 'typeorm'\nimport { BitstringStatusListEntryEntity } from './BitstringStatusListEntryEntity'\n\nimport { StatusListEntryEntity } from './StatusList2021EntryEntity'\n\n@Entity('StatusList')\n@Unique('UQ_correlationId', ['correlationId'])\n@TableInheritance({ column: { type: 'simple-enum', name: 'type', enum: StatusListType } })\nexport abstract class StatusListEntity extends BaseEntity {\n @PrimaryColumn({ name: 'id', type: 'varchar' })\n id!: string\n\n @Column({ name: 'correlationId', type: 'varchar', nullable: false })\n correlationId!: string\n\n @Column({ name: 'length', type: 'integer', nullable: false, unique: false })\n length!: number\n\n @Column('simple-enum', {\n name: 'type',\n enum: StatusListType,\n nullable: false,\n })\n type!: StatusListType\n\n @Column({\n name: 'issuer',\n type: 'text',\n nullable: false,\n unique: false,\n transformer: {\n from(value: string): string | IIssuer {\n if (value?.trim()?.startsWith('{')) {\n return JSON.parse(value)\n }\n return value\n },\n to(value: string | IIssuer): string {\n if (typeof value === 'string') {\n return value\n }\n return JSON.stringify(value)\n },\n },\n })\n issuer!: string | IIssuer\n\n @Column('simple-enum', {\n name: 'driverType',\n enum: StatusListDriverType,\n nullable: false,\n default: StatusListDriverType.AGENT_TYPEORM,\n })\n driverType!: StatusListDriverType\n\n @Column('simple-enum', {\n name: 'credentialIdMode',\n enum: StatusListCredentialIdMode,\n nullable: false,\n default: StatusListCredentialIdMode.ISSUANCE,\n })\n credentialIdMode!: StatusListCredentialIdMode\n\n @Column({ type: 'varchar', name: 'proofFormat', enum: ['lds', 'jwt'], nullable: false, default: 'lds' })\n proofFormat!: CredentialProofFormat\n\n @Column({\n name: 'statusListCredential',\n type: 'text',\n nullable: true,\n unique: false,\n transformer: {\n from(value: string): StatusListCredential {\n if (value?.startsWith('ey')) {\n return value\n }\n return JSON.parse(value)\n },\n to(value: StatusListCredential): string {\n if (typeof value === 'string') {\n return value\n }\n return JSON.stringify(value)\n },\n },\n })\n statusListCredential?: StatusListCredential\n}\n\n@ChildEntity(StatusListType.StatusList2021)\nexport class StatusList2021Entity extends StatusListEntity {\n @Column({\n type: 'varchar',\n name: 'indexingDirection',\n enum: ['rightToLeft'],\n nullable: false,\n default: 'rightToLeft',\n })\n indexingDirection!: StatusListIndexingDirection\n\n @Column({ type: 'varchar', name: 'statusPurpose', nullable: false, default: 'revocation' })\n statusPurpose!: StatusPurpose2021\n\n @OneToMany((type) => StatusListEntryEntity, (entry) => entry.statusList)\n statusListEntries!: StatusListEntryEntity[]\n}\n\n@ChildEntity(StatusListType.OAuthStatusList)\nexport class OAuthStatusListEntity extends StatusListEntity {\n @Column({ type: 'integer', name: 'bitsPerStatus', nullable: false })\n bitsPerStatus!: number\n @Column({ name: 'expiresAt', nullable: true, type: typeOrmDateTime() })\n expiresAt?: Date\n}\n\n@ChildEntity(StatusListType.BitstringStatusList)\nexport class BitstringStatusListEntity extends StatusListEntity {\n @Column({\n type: 'varchar',\n name: 'statusPurpose',\n nullable: false,\n transformer: {\n from(value: string): string | string[] {\n if (value?.includes(',')) {\n return value.split(',').map((v) => v.trim() as string)\n }\n return value as string\n },\n to(value: string | string[]): string {\n if (Array.isArray(value)) {\n return value.join(',')\n }\n return value\n },\n },\n })\n statusPurpose!: string | string[]\n\n @Column({ type: 'integer', name: 'bitsPerStatus', nullable: false })\n bitsPerStatus?: number\n\n @Column({ name: 'validFrom', nullable: true, type: typeOrmDateTime() })\n validFrom?: Date\n\n @Column({ name: 'validUntil', nullable: true, type: typeOrmDateTime() })\n validUntil?: Date\n\n @Column({ type: 'integer', name: 'ttl', nullable: true })\n ttl?: number\n\n @OneToMany((type) => BitstringStatusListEntryEntity, (entry) => entry.statusList)\n statusListEntries!: BitstringStatusListEntryEntity[]\n}\n","import {\n AbstractContactStore,\n AddElectronicAddressArgs,\n AddIdentityArgs,\n AddPartyArgs,\n AddPartyTypeArgs,\n AddPhysicalAddressArgs,\n AddRelationshipArgs,\n ConnectionType,\n CorrelationIdentifierType,\n ElectronicAddress,\n GetElectronicAddressArgs,\n GetElectronicAddressesArgs,\n GetIdentitiesArgs,\n GetIdentityArgs,\n GetPartiesArgs,\n GetPartyArgs,\n GetPartyTypeArgs,\n GetPartyTypesArgs,\n GetPhysicalAddressArgs,\n GetPhysicalAddressesArgs,\n GetRelationshipArgs,\n GetRelationshipsArgs,\n Identity,\n IMetadataEntity,\n MetadataItem,\n MetadataTypes,\n NonPersistedConnectionConfig,\n NonPersistedContact,\n Party,\n PartyRelationship,\n PartyType,\n PartyTypeType,\n PhysicalAddress,\n RemoveElectronicAddressArgs,\n RemoveIdentityArgs,\n RemovePartyArgs,\n RemovePartyTypeArgs,\n RemovePhysicalAddressArgs,\n RemoveRelationshipArgs,\n UpdateElectronicAddressArgs,\n UpdateIdentityArgs,\n UpdatePartyArgs,\n UpdatePartyTypeArgs,\n UpdatePhysicalAddressArgs,\n UpdateRelationshipArgs,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { BaseEntity, DataSource, type FindOptionsWhere, In, type Repository } from 'typeorm'\nimport { BaseConfigEntity } from '../entities/contact/BaseConfigEntity'\nimport { BaseContactEntity } from '../entities/contact/BaseContactEntity'\nimport { ConnectionEntity } from '../entities/contact/ConnectionEntity'\nimport { CorrelationIdentifierEntity } from '../entities/contact/CorrelationIdentifierEntity'\nimport { ElectronicAddressEntity } from '../entities/contact/ElectronicAddressEntity'\nimport { IdentityEntity } from '../entities/contact/IdentityEntity'\nimport { IdentityMetadataItemEntity } from '../entities/contact/IdentityMetadataItemEntity'\nimport { PartyEntity } from '../entities/contact/PartyEntity'\nimport { PartyRelationshipEntity } from '../entities/contact/PartyRelationshipEntity'\nimport { PartyTypeEntity } from '../entities/contact/PartyTypeEntity'\nimport { PhysicalAddressEntity } from '../entities/contact/PhysicalAddressEntity'\nimport {\n electronicAddressEntityFrom,\n electronicAddressFrom,\n identityEntityFrom,\n identityFrom,\n isDidAuthConfig,\n isNaturalPerson,\n isOpenIdConfig,\n isOrganization,\n partyEntityFrom,\n partyFrom,\n partyRelationshipEntityFrom,\n partyRelationshipFrom,\n partyTypeEntityFrom,\n partyTypeFrom,\n physicalAddressEntityFrom,\n physicalAddressFrom,\n} from '../utils/contact/MappingUtils'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:contact-store')\n\nexport class ContactStore extends AbstractContactStore {\n private readonly dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n getParty = async (args: GetPartyArgs): Promise<Party> => {\n const { partyId } = args\n const result: PartyEntity | null = await (await this.dbConnection).getRepository(PartyEntity).findOne({\n where: { id: partyId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party found for id: ${partyId}`))\n }\n\n return partyFrom(result)\n }\n\n getParties = async (args?: GetPartiesArgs): Promise<Array<Party>> => {\n debug('getParties()', args)\n const { filter } = args ?? {}\n const partyRepository = (await this.dbConnection).getRepository(PartyEntity)\n const filterConditions = this.buildFilters(filter)\n const initialResult = await partyRepository.find({ select: ['id'], where: filterConditions })\n\n // Fetch the complete entities based on the initial result IDs\n const result = await partyRepository.find({ where: { id: In(initialResult.map((party) => party.id)) } })\n debug(`getParties() resulted in ${result.length} parties`)\n return result.map(partyFrom)\n }\n\n addParty = async (args: AddPartyArgs): Promise<Party> => {\n const { identities, contact, partyType } = args\n\n const partyRepository: Repository<PartyEntity> = (await this.dbConnection).getRepository(PartyEntity)\n\n if (!this.hasCorrectPartyType(partyType.type, contact)) {\n return Promise.reject(Error(`Party type ${partyType.type}, does not match for provided contact`))\n }\n\n for (const identity of identities ?? []) {\n if (identity.identifier.type === CorrelationIdentifierType.URL) {\n if (!identity.connection) {\n return Promise.reject(Error(`Identity with correlation type ${CorrelationIdentifierType.URL} should contain a connection`))\n }\n\n if (!this.hasCorrectConnectionConfig(identity.connection.type, identity.connection.config)) {\n return Promise.reject(Error(`Connection type ${identity.connection.type}, does not match for provided config`))\n }\n }\n }\n\n const partyEntity: PartyEntity = partyEntityFrom(args)\n debug('Adding party', args)\n const createdResult: PartyEntity = await partyRepository.save(partyEntity)\n\n return partyFrom(createdResult)\n }\n\n updateParty = async (args: UpdatePartyArgs): Promise<Party> => {\n const { party } = args\n const partyRepository: Repository<PartyEntity> = (await this.dbConnection).getRepository(PartyEntity)\n const result: PartyEntity | null = await partyRepository.findOne({\n where: { id: party.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party found for id: ${party.id}`))\n }\n\n const updatedParty = {\n ...party,\n identities: result.identities,\n type: result.partyType,\n relationships: result.relationships,\n electronicAddresses: result.electronicAddresses,\n }\n\n debug('Updating party', party)\n const updatedResult: PartyEntity = await partyRepository.save(updatedParty, { transaction: true })\n\n return partyFrom(updatedResult)\n }\n\n removeParty = async (args: RemovePartyArgs): Promise<void> => {\n const { partyId } = args\n const partyRepository: Repository<PartyEntity> = (await this.dbConnection).getRepository(PartyEntity)\n debug('Removing party', partyId)\n partyRepository\n .findOneById(partyId)\n .then(async (party: PartyEntity | null): Promise<void> => {\n if (!party) {\n await Promise.reject(Error(`Unable to find the party with id to remove: ${partyId}`))\n } else {\n await this.deleteIdentities(party.identities)\n await this.deleteElectronicAddresses(party.electronicAddresses)\n await this.deletePhysicalAddresses(party.physicalAddresses)\n\n await partyRepository\n .delete({ id: partyId })\n .catch((error) => Promise.reject(Error(`Unable to remove party with id: ${partyId}. ${error}`)))\n\n const partyContactRepository: Repository<BaseContactEntity> = (await this.dbConnection).getRepository(BaseContactEntity)\n await partyContactRepository\n .delete({ id: party.contact.id })\n .catch((error) => Promise.reject(Error(`Unable to remove party contact with id: ${party.contact.id}. ${error}`)))\n }\n })\n .catch((error) => Promise.reject(Error(`Unable to remove party with id: ${partyId}. ${error}`)))\n }\n\n getIdentity = async (args: GetIdentityArgs): Promise<Identity> => {\n const { identityId } = args\n const result: IdentityEntity | null = await (await this.dbConnection).getRepository(IdentityEntity).findOne({\n where: { id: identityId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No identity found for id: ${identityId}`))\n }\n\n return identityFrom(result)\n }\n\n getIdentities = async (args?: GetIdentitiesArgs): Promise<Array<Identity>> => {\n const { filter } = args ?? {}\n const identityRepository = (await this.dbConnection).getRepository(IdentityEntity)\n const filterConditions = this.buildFilters(filter)\n const initialResult = await identityRepository.find({ select: ['id'], where: filterConditions })\n\n const result = await identityRepository.find({ where: { id: In(initialResult.map((identity) => identity.id)) } })\n return result.map(identityFrom)\n }\n\n addIdentity = async (args: AddIdentityArgs): Promise<Identity> => {\n const { identity, partyId } = args\n const party: PartyEntity | null = await (await this.dbConnection).getRepository(PartyEntity).findOne({\n where: { id: partyId },\n })\n\n if (!party) {\n return Promise.reject(Error(`No party found for id: ${partyId}`))\n }\n\n if (identity.identifier.type === CorrelationIdentifierType.URL) {\n if (!identity.connection) {\n return Promise.reject(Error(`Identity with correlation type ${CorrelationIdentifierType.URL} should contain a connection`))\n }\n\n if (!this.hasCorrectConnectionConfig(identity.connection.type, identity.connection.config)) {\n return Promise.reject(Error(`Connection type ${identity.connection.type}, does not match for provided config`))\n }\n }\n\n const identityEntity: IdentityEntity = identityEntityFrom(identity)\n identityEntity.party = party\n debug('Adding identity', identity)\n const result: IdentityEntity = await (await this.dbConnection).getRepository(IdentityEntity).save(identityEntity, {\n transaction: true,\n })\n\n return identityFrom(result)\n }\n\n updateIdentity = async (args: UpdateIdentityArgs): Promise<Identity> => {\n const { identity } = args\n const identityRepository: Repository<IdentityEntity> = (await this.dbConnection).getRepository(IdentityEntity)\n const result: IdentityEntity | null = await identityRepository.findOne({\n where: { id: identity.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No identity found for id: ${identity.id}`))\n }\n\n if (identity.identifier.type === CorrelationIdentifierType.URL) {\n if (!identity.connection) {\n return Promise.reject(Error(`Identity with correlation type ${CorrelationIdentifierType.URL} should contain a connection`))\n }\n\n if (!this.hasCorrectConnectionConfig(identity.connection.type, identity.connection.config)) {\n return Promise.reject(Error(`Connection type ${identity.connection.type}, does not match for provided config`))\n }\n }\n\n debug('Updating identity', identity)\n const updatedResult: IdentityEntity = await identityRepository.save(identity, { transaction: true })\n\n return identityFrom(updatedResult)\n }\n\n removeIdentity = async (args: RemoveIdentityArgs): Promise<void> => {\n const { identityId } = args\n const identity: IdentityEntity | null = await (await this.dbConnection).getRepository(IdentityEntity).findOne({\n where: { id: identityId },\n })\n\n if (!identity) {\n return Promise.reject(Error(`No identity found for id: ${identityId}`))\n }\n\n debug('Removing identity', identityId)\n\n await this.deleteIdentities([identity])\n }\n\n addRelationship = async (args: AddRelationshipArgs): Promise<PartyRelationship> => {\n const { leftId, rightId } = args\n return this.assertRelationshipSides(leftId, rightId).then(async (): Promise<PartyRelationship> => {\n const relationship: PartyRelationshipEntity = partyRelationshipEntityFrom({\n leftId,\n rightId,\n })\n debug('Adding party relationship', relationship)\n\n const createdResult: PartyRelationshipEntity = await (await this.dbConnection).getRepository(PartyRelationshipEntity).save(relationship)\n\n return partyRelationshipFrom(createdResult)\n })\n }\n\n getRelationship = async (args: GetRelationshipArgs): Promise<PartyRelationship> => {\n const { relationshipId } = args\n const result: PartyRelationshipEntity | null = await (await this.dbConnection).getRepository(PartyRelationshipEntity).findOne({\n where: { id: relationshipId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No relationship found for id: ${relationshipId}`))\n }\n\n return partyRelationshipFrom(result)\n }\n\n getRelationships = async (args?: GetRelationshipsArgs): Promise<Array<PartyRelationship>> => {\n const { filter } = args ?? {}\n const partyRelationshipRepository: Repository<PartyRelationshipEntity> = (await this.dbConnection).getRepository(PartyRelationshipEntity)\n const initialResult: Array<PartyRelationshipEntity> = await partyRelationshipRepository.find({\n ...(filter && { where: filter }),\n })\n\n const result: Array<PartyRelationshipEntity> = await partyRelationshipRepository.find({\n where: {\n id: In(initialResult.map((partyRelationship: PartyRelationshipEntity) => partyRelationship.id)),\n },\n })\n\n return result.map((partyRelationship: PartyRelationshipEntity) => partyRelationshipFrom(partyRelationship))\n }\n\n updateRelationship = async (args: UpdateRelationshipArgs): Promise<PartyRelationship> => {\n const { relationship } = args\n const partyRelationshipRepository: Repository<PartyRelationshipEntity> = (await this.dbConnection).getRepository(PartyRelationshipEntity)\n const result: PartyRelationshipEntity | null = await partyRelationshipRepository.findOne({\n where: { id: relationship.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party relationship found for id: ${relationship.id}`))\n }\n\n return this.assertRelationshipSides(relationship.leftId, relationship.rightId).then(async (): Promise<PartyRelationship> => {\n debug('Updating party relationship', relationship)\n const updatedResult: PartyRelationshipEntity = await partyRelationshipRepository.save(relationship, { transaction: true })\n\n return partyRelationshipFrom(updatedResult)\n })\n }\n\n removeRelationship = async (args: RemoveRelationshipArgs): Promise<void> => {\n const { relationshipId } = args\n const partyRelationshipRepository: Repository<PartyRelationshipEntity> = (await this.dbConnection).getRepository(PartyRelationshipEntity)\n const relationship: PartyRelationshipEntity | null = await partyRelationshipRepository.findOne({\n where: { id: relationshipId },\n })\n\n if (!relationship) {\n return Promise.reject(Error(`No relationship found for id: ${relationshipId}`))\n }\n\n debug('Removing relationship', relationshipId)\n\n await partyRelationshipRepository.delete(relationshipId)\n }\n\n addPartyType = async (args: AddPartyTypeArgs): Promise<PartyType> => {\n const partyEntity: PartyTypeEntity = partyTypeEntityFrom(args)\n debug('Adding party type', args)\n const createdResult: PartyTypeEntity = await (await this.dbConnection).getRepository(PartyTypeEntity).save(partyEntity)\n\n return partyTypeFrom(createdResult)\n }\n\n getPartyType = async (args: GetPartyTypeArgs): Promise<PartyType> => {\n const { partyTypeId } = args\n const result: PartyTypeEntity | null = await (await this.dbConnection).getRepository(PartyTypeEntity).findOne({\n where: { id: partyTypeId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party type found for id: ${partyTypeId}`))\n }\n\n return partyTypeFrom(result)\n }\n\n getPartyTypes = async (args?: GetPartyTypesArgs): Promise<Array<PartyType>> => {\n const { filter } = args ?? {}\n const partyTypeRepository: Repository<PartyTypeEntity> = (await this.dbConnection).getRepository(PartyTypeEntity)\n const initialResult: Array<PartyTypeEntity> = await partyTypeRepository.find({\n ...(filter && { where: filter }),\n })\n\n const result: Array<PartyTypeEntity> = await partyTypeRepository.find({\n where: {\n id: In(initialResult.map((partyType: PartyTypeEntity) => partyType.id)),\n },\n })\n\n return result.map((partyType: PartyTypeEntity) => partyTypeFrom(partyType))\n }\n\n updatePartyType = async (args: UpdatePartyTypeArgs): Promise<PartyType> => {\n const { partyType } = args\n const partyTypeRepository: Repository<PartyTypeEntity> = (await this.dbConnection).getRepository(PartyTypeEntity)\n const result: PartyTypeEntity | null = await partyTypeRepository.findOne({\n where: { id: partyType.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No party type found for id: ${partyType.id}`))\n }\n\n debug('Updating party type', partyType)\n const updatedResult: PartyTypeEntity = await partyTypeRepository.save(partyType, { transaction: true })\n\n return partyTypeFrom(updatedResult)\n }\n\n removePartyType = async (args: RemovePartyTypeArgs): Promise<void> => {\n const { partyTypeId } = args\n const parties: Array<PartyEntity> = await (await this.dbConnection).getRepository(PartyEntity).find({\n where: {\n partyType: {\n id: partyTypeId,\n },\n },\n })\n\n if (parties.length > 0) {\n return Promise.reject(Error(`Unable to remove party type with id: ${partyTypeId}. Party type is in use`))\n }\n\n const partyTypeRepository: Repository<PartyTypeEntity> = (await this.dbConnection).getRepository(PartyTypeEntity)\n const partyType: PartyTypeEntity | null = await partyTypeRepository.findOne({\n where: { id: partyTypeId },\n })\n\n if (!partyType) {\n return Promise.reject(Error(`No party type found for id: ${partyTypeId}`))\n }\n\n debug('Removing party type', partyTypeId)\n\n await partyTypeRepository.delete(partyTypeId)\n }\n\n getElectronicAddress = async (args: GetElectronicAddressArgs): Promise<ElectronicAddress> => {\n const { electronicAddressId } = args\n const result: ElectronicAddressEntity | null = await (await this.dbConnection).getRepository(ElectronicAddressEntity).findOne({\n where: { id: electronicAddressId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No electronic address found for id: ${electronicAddressId}`))\n }\n\n return electronicAddressFrom(result)\n }\n\n getElectronicAddresses = async (args?: GetElectronicAddressesArgs): Promise<Array<ElectronicAddress>> => {\n const { filter } = args ?? {}\n const electronicAddressRepository: Repository<ElectronicAddressEntity> = (await this.dbConnection).getRepository(ElectronicAddressEntity)\n const initialResult: Array<ElectronicAddressEntity> = await electronicAddressRepository.find({\n ...(filter && { where: filter }),\n })\n\n const result: Array<ElectronicAddressEntity> = await electronicAddressRepository.find({\n where: {\n id: In(initialResult.map((electronicAddress: ElectronicAddressEntity) => electronicAddress.id)),\n },\n })\n\n return result.map((electronicAddress: ElectronicAddressEntity) => electronicAddressFrom(electronicAddress))\n }\n\n addElectronicAddress = async (args: AddElectronicAddressArgs): Promise<ElectronicAddress> => {\n const { electronicAddress, partyId } = args\n const party: PartyEntity | null = await (await this.dbConnection).getRepository(PartyEntity).findOne({\n where: { id: partyId },\n })\n\n if (!party) {\n return Promise.reject(Error(`No party found for id: ${partyId}`))\n }\n\n const electronicAddressEntity: ElectronicAddressEntity = electronicAddressEntityFrom(electronicAddress)\n electronicAddressEntity.party = party\n debug('Adding electronic address', electronicAddress)\n const result: ElectronicAddressEntity = await (await this.dbConnection).getRepository(ElectronicAddressEntity).save(electronicAddressEntity, {\n transaction: true,\n })\n\n return electronicAddressFrom(result)\n }\n\n updateElectronicAddress = async (args: UpdateElectronicAddressArgs): Promise<ElectronicAddress> => {\n const { electronicAddress } = args\n const electronicAddressRepository: Repository<ElectronicAddressEntity> = (await this.dbConnection).getRepository(ElectronicAddressEntity)\n const result: ElectronicAddressEntity | null = await electronicAddressRepository.findOne({\n where: { id: electronicAddress.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No electronic address found for id: ${electronicAddress.id}`))\n }\n\n debug('Updating electronic address', electronicAddress)\n const updatedResult: ElectronicAddressEntity = await electronicAddressRepository.save(electronicAddress, { transaction: true })\n\n return electronicAddressFrom(updatedResult)\n }\n\n removeElectronicAddress = async (args: RemoveElectronicAddressArgs): Promise<void> => {\n const { electronicAddressId } = args\n const electronicAddressRepository: Repository<ElectronicAddressEntity> = (await this.dbConnection).getRepository(ElectronicAddressEntity)\n const electronicAddress: ElectronicAddressEntity | null = await electronicAddressRepository.findOne({\n where: { id: electronicAddressId },\n })\n\n if (!electronicAddress) {\n return Promise.reject(Error(`No electronic address found for id: ${electronicAddressId}`))\n }\n\n debug('Removing electronic address', electronicAddressId)\n\n await electronicAddressRepository.delete(electronicAddressId)\n }\n\n getPhysicalAddress = async (args: GetPhysicalAddressArgs): Promise<PhysicalAddress> => {\n const { physicalAddressId } = args\n const result: PhysicalAddressEntity | null = await (await this.dbConnection).getRepository(PhysicalAddressEntity).findOne({\n where: { id: physicalAddressId },\n })\n\n if (!result) {\n return Promise.reject(Error(`No physical address found for id: ${physicalAddressId}`))\n }\n\n return physicalAddressFrom(result)\n }\n\n getPhysicalAddresses = async (args?: GetPhysicalAddressesArgs): Promise<Array<PhysicalAddress>> => {\n const { filter } = args ?? {}\n const physicalAddressRepository: Repository<PhysicalAddressEntity> = (await this.dbConnection).getRepository(PhysicalAddressEntity)\n const initialResult: Array<PhysicalAddressEntity> = await physicalAddressRepository.find({\n ...(filter && { where: filter }),\n })\n\n const result: Array<PhysicalAddressEntity> = await physicalAddressRepository.find({\n where: {\n id: In(initialResult.map((physicalAddress: PhysicalAddressEntity) => physicalAddress.id)),\n },\n })\n\n return result.map((physicalAddress: PhysicalAddressEntity) => physicalAddressFrom(physicalAddress))\n }\n\n addPhysicalAddress = async (args: AddPhysicalAddressArgs): Promise<PhysicalAddress> => {\n const { physicalAddress, partyId } = args\n const party: PartyEntity | null = await (await this.dbConnection).getRepository(PartyEntity).findOne({\n where: { id: partyId },\n })\n\n if (!party) {\n return Promise.reject(Error(`No party found for id: ${partyId}`))\n }\n\n const physicalAddressEntity: PhysicalAddressEntity = physicalAddressEntityFrom(physicalAddress)\n physicalAddressEntity.party = party\n debug('Adding physical address', physicalAddress)\n const result: PhysicalAddressEntity = await (await this.dbConnection).getRepository(PhysicalAddressEntity).save(physicalAddressEntity, {\n transaction: true,\n })\n\n return physicalAddressFrom(result)\n }\n\n updatePhysicalAddress = async (args: UpdatePhysicalAddressArgs): Promise<PhysicalAddress> => {\n const { physicalAddress } = args\n const physicalAddressRepository: Repository<PhysicalAddressEntity> = (await this.dbConnection).getRepository(PhysicalAddressEntity)\n const result: PhysicalAddressEntity | null = await physicalAddressRepository.findOne({\n where: { id: physicalAddress.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No physical address found for id: ${physicalAddress.id}`))\n }\n\n debug('Updating physical address', physicalAddress)\n const updatedResult: PhysicalAddressEntity = await physicalAddressRepository.save(physicalAddress, { transaction: true })\n\n return physicalAddressFrom(updatedResult)\n }\n\n removePhysicalAddress = async (args: RemovePhysicalAddressArgs): Promise<void> => {\n const { physicalAddressId } = args\n const physicalAddressRepository: Repository<PhysicalAddressEntity> = (await this.dbConnection).getRepository(PhysicalAddressEntity)\n const physicalAddress: PhysicalAddressEntity | null = await physicalAddressRepository.findOne({\n where: { id: physicalAddressId },\n })\n\n if (!physicalAddress) {\n return Promise.reject(Error(`No physical address found for id: ${physicalAddressId}`))\n }\n\n debug('Removing physical address', physicalAddressId)\n\n await physicalAddressRepository.delete(physicalAddressId)\n }\n\n private hasCorrectConnectionConfig = (type: ConnectionType, config: NonPersistedConnectionConfig): boolean => {\n switch (type) {\n case ConnectionType.OPENID_CONNECT:\n return isOpenIdConfig(config)\n case ConnectionType.SIOPv2:\n return isDidAuthConfig(config)\n default:\n throw new Error('Connection type not supported')\n }\n }\n\n private hasCorrectPartyType = (type: PartyTypeType, contact: NonPersistedContact): boolean => {\n switch (type) {\n case PartyTypeType.NATURAL_PERSON:\n return isNaturalPerson(contact)\n case PartyTypeType.ORGANIZATION:\n return isOrganization(contact)\n default:\n throw new Error('Party type not supported')\n }\n }\n\n private deleteIdentities = async (identities: Array<IdentityEntity>): Promise<void> => {\n debug('Removing identities', identities)\n\n const connection: DataSource = await this.dbConnection\n const correlationIdentifierRepository: Repository<CorrelationIdentifierEntity> = connection.getRepository(CorrelationIdentifierEntity)\n const baseConfigRepository: Repository<BaseConfigEntity> = connection.getRepository(BaseConfigEntity)\n const connectionRepository: Repository<ConnectionEntity> = connection.getRepository(ConnectionEntity)\n const identityMetadataItemRepository: Repository<IdentityMetadataItemEntity> = connection.getRepository(IdentityMetadataItemEntity)\n const identityRepository: Repository<IdentityEntity> = connection.getRepository(IdentityEntity)\n\n identities.map(async (identity: IdentityEntity): Promise<void> => {\n await correlationIdentifierRepository\n .delete(identity.identifier.id)\n .catch((error) => Promise.reject(Error(`Unable to remove identity.identifier with id ${identity.identifier.id}. ${error}`)))\n\n if (identity.connection) {\n await baseConfigRepository.delete(identity.connection.config.id)\n await connectionRepository\n .delete(identity.connection.id)\n .catch((error) => Promise.reject(Error(`Unable to remove identity.connection with id ${identity.connection?.id}. ${error}`)))\n }\n\n if (identity.metadata) {\n identity.metadata.map(async (metadataItem: IdentityMetadataItemEntity): Promise<void> => {\n await identityMetadataItemRepository\n .delete(metadataItem.id)\n .catch((error) => Promise.reject(Error(`Unable to remove identity.metadataItem with id ${metadataItem.id}. ${error}`)))\n })\n }\n\n await identityRepository\n .delete(identity.id)\n .catch((error) => Promise.reject(Error(`Unable to remove identity with id ${identity.id}. ${error}`)))\n })\n }\n\n private deleteElectronicAddresses = async (electronicAddresses: Array<ElectronicAddressEntity>): Promise<void> => {\n debug('Removing electronic addresses', electronicAddresses)\n\n const electronicAddressRepository: Repository<ElectronicAddressEntity> = (await this.dbConnection).getRepository(ElectronicAddressEntity)\n electronicAddresses.map(async (electronicAddress: ElectronicAddressEntity): Promise<void> => {\n await electronicAddressRepository\n .delete(electronicAddress.id)\n .catch((error) => Promise.reject(Error(`Unable to remove electronic address with id ${electronicAddress.id}. ${error}`)))\n })\n }\n\n private deletePhysicalAddresses = async (physicalAddresses: Array<PhysicalAddressEntity>): Promise<void> => {\n debug('Removing physical addresses', physicalAddresses)\n\n const physicalAddressRepository: Repository<PhysicalAddressEntity> = (await this.dbConnection).getRepository(PhysicalAddressEntity)\n physicalAddresses.map(async (physicalAddress: PhysicalAddressEntity): Promise<void> => {\n await physicalAddressRepository\n .delete(physicalAddress.id)\n .catch((error) => Promise.reject(Error(`Unable to remove physical address with id ${physicalAddress.id}. ${error}`)))\n })\n }\n\n private assertRelationshipSides = async (leftId: string, rightId: string): Promise<void> => {\n const partyRepository: Repository<PartyEntity> = (await this.dbConnection).getRepository(PartyEntity)\n const leftParty: PartyEntity | null = await partyRepository.findOne({\n where: { id: leftId },\n })\n\n if (!leftParty) {\n return Promise.reject(Error(`No party found for left side of the relationship, party id: ${leftId}`))\n }\n\n const rightParty: PartyEntity | null = await partyRepository.findOne({\n where: { id: rightId },\n })\n\n if (!rightParty) {\n return Promise.reject(Error(`No party found for right side of the relationship, party id: ${rightId}`))\n }\n }\n\n private buildFilters = <T extends BaseEntity>(filter?: Array<Record<string, any>>): Array<FindOptionsWhere<T>> | FindOptionsWhere<T> => {\n if (!filter) return {}\n\n return filter.map((condition) => this.processCondition(condition))\n }\n\n private processCondition = (condition: Record<string, any>): Record<string, any> => {\n const conditionObject: Record<string, any> = {}\n\n Object.keys(condition).forEach((key) => {\n const value = condition[key]\n\n if (key === 'metadata' && value) {\n conditionObject[key] = this.buildMetadataCondition(value)\n } else if (typeof value === 'object' && value !== null) {\n conditionObject[key] = this.processCondition(value)\n } else {\n conditionObject[key] = value\n }\n })\n\n return conditionObject\n }\n\n private buildMetadataCondition = <T extends MetadataItem<MetadataTypes>>(metadata: Partial<T>): FindOptionsWhere<IMetadataEntity> => {\n const metadataCondition: FindOptionsWhere<any> = {\n label: metadata.label,\n }\n\n switch (typeof metadata.value) {\n case 'string':\n metadataCondition.stringValue = metadata.value as string\n break\n case 'number':\n metadataCondition.numberValue = metadata.value as number\n break\n case 'boolean':\n metadataCondition.boolValue = metadata.value as boolean\n break\n case 'object':\n if (metadata.value instanceof Date) {\n metadataCondition.dateValue = metadata.value as Date\n } else {\n // For now, we only support / implement not-primitive type Date in the entity\n throw new Error(`Unsupported object type: ${Object.prototype.toString.call(metadata.value).slice(8, -1)} for value ${metadata.value}`) // slice to extract type from string [object String]\n }\n break\n default:\n throw new Error(`Unsupported value type: ${typeof metadata.value}`)\n }\n return metadataCondition\n }\n}\n","export const replaceNullWithUndefined = (obj: any): any => {\n if (obj === null) {\n return undefined\n }\n\n if (typeof obj !== 'object' || obj instanceof Date) {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj.map((value: any) => replaceNullWithUndefined(value))\n }\n\n const result: any = {}\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n result[key] = replaceNullWithUndefined(obj[key])\n }\n }\n return result\n}\n","import type {\n Connection,\n ConnectionConfig,\n Contact,\n CorrelationIdentifier,\n DidAuthConfig,\n ElectronicAddress,\n Identity,\n MetadataItem,\n MetadataTypes,\n NaturalPerson,\n NonPersistedConnection,\n NonPersistedConnectionConfig,\n NonPersistedContact,\n NonPersistedCorrelationIdentifier,\n NonPersistedDidAuthConfig,\n NonPersistedElectronicAddress,\n NonPersistedIdentity,\n NonPersistedMetadataItem,\n NonPersistedNaturalPerson,\n NonPersistedOpenIdConfig,\n NonPersistedOrganization,\n NonPersistedParty,\n NonPersistedPartyRelationship,\n NonPersistedPartyType,\n NonPersistedPhysicalAddress,\n OpenIdConfig,\n Organization,\n Party,\n PartyRelationship,\n PartyType,\n PhysicalAddress,\n} from '@sphereon/ssi-sdk.data-store-types'\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'\nimport { PartyRelationshipEntity } from '../../entities/contact/PartyRelationshipEntity'\nimport { PartyTypeEntity } from '../../entities/contact/PartyTypeEntity'\nimport { PhysicalAddressEntity } from '../../entities/contact/PhysicalAddressEntity'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const partyEntityFrom = (party: NonPersistedParty): PartyEntity => {\n const partyEntity: PartyEntity = new PartyEntity()\n partyEntity.uri = party.uri\n partyEntity.identities = party.identities ? party.identities.map((identity: NonPersistedIdentity) => identityEntityFrom(identity)) : []\n partyEntity.electronicAddresses = party.electronicAddresses\n ? party.electronicAddresses.map((electronicAddress: NonPersistedElectronicAddress) => electronicAddressEntityFrom(electronicAddress))\n : []\n partyEntity.physicalAddresses = party.physicalAddresses\n ? party.physicalAddresses.map((physicalAddress: NonPersistedPhysicalAddress) => physicalAddressEntityFrom(physicalAddress))\n : []\n partyEntity.partyType = partyTypeEntityFrom(party.partyType)\n partyEntity.contact = contactEntityFrom(party.contact)\n partyEntity.ownerId = party.ownerId\n partyEntity.tenantId = party.tenantId\n\n return partyEntity\n}\n\nexport const partyFrom = (party: PartyEntity): Party => {\n const result: Party = {\n id: party.id,\n uri: party.uri,\n roles: [...new Set(party.identities?.flatMap((identity: IdentityEntity) => identity.roles))],\n identities: party.identities ? party.identities.map((identity: IdentityEntity) => identityFrom(identity)) : [],\n electronicAddresses: party.electronicAddresses\n ? party.electronicAddresses.map((electronicAddress: ElectronicAddressEntity) => electronicAddressFrom(electronicAddress))\n : [],\n physicalAddresses: party.physicalAddresses\n ? party.physicalAddresses.map((physicalAddress: PhysicalAddressEntity) => physicalAddressFrom(physicalAddress))\n : [],\n relationships: party.relationships ? party.relationships.map((relationship: PartyRelationshipEntity) => partyRelationshipFrom(relationship)) : [],\n partyType: partyTypeFrom(party.partyType),\n contact: contactFrom(party.contact),\n ownerId: party.ownerId,\n tenantId: party.tenantId,\n createdAt: party.createdAt,\n lastUpdatedAt: party.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const contactEntityFrom = (contact: NonPersistedContact): BaseContactEntity => {\n if (isNaturalPerson(contact)) {\n return naturalPersonEntityFrom(<NonPersistedNaturalPerson>contact)\n } else if (isOrganization(contact)) {\n return organizationEntityFrom(<NonPersistedOrganization>contact)\n }\n\n throw new Error('Contact not supported')\n}\n\nexport const contactFrom = (contact: BaseContactEntity): Contact => {\n if (isNaturalPerson(contact)) {\n return naturalPersonFrom(<NaturalPersonEntity>contact)\n } else if (isOrganization(contact)) {\n return organizationFrom(<OrganizationEntity>contact)\n }\n\n throw new Error(`Contact type not supported`)\n}\n\nexport const isNaturalPerson = (contact: NonPersistedContact | BaseContactEntity): contact is NonPersistedNaturalPerson | NaturalPersonEntity =>\n 'firstName' in contact && 'lastName' in contact\n\nexport const isOrganization = (contact: NonPersistedContact | BaseContactEntity): contact is NonPersistedOrganization | OrganizationEntity =>\n 'legalName' in contact\n\nexport const connectionEntityFrom = (connection: NonPersistedConnection): ConnectionEntity => {\n const connectionEntity: ConnectionEntity = new ConnectionEntity()\n connectionEntity.type = connection.type\n connectionEntity.config = configEntityFrom(connection.config)\n connectionEntity.ownerId = connection.ownerId\n connectionEntity.tenantId = connection.tenantId\n\n return connectionEntity\n}\n\nexport const connectionFrom = (connection: ConnectionEntity): Connection => {\n const result: Connection = {\n id: connection.id,\n type: connection.type,\n ownerId: connection.ownerId,\n tenantId: connection.tenantId,\n config: configFrom(connection.config),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nconst configEntityFrom = (config: NonPersistedConnectionConfig): BaseConfigEntity => {\n if (isOpenIdConfig(config)) {\n return openIdConfigEntityFrom(<NonPersistedOpenIdConfig>config)\n } else if (isDidAuthConfig(config)) {\n return didAuthConfigEntityFrom(<NonPersistedDidAuthConfig>config)\n }\n\n throw new Error('config type not supported')\n}\n\nexport const correlationIdentifierEntityFrom = (identifier: NonPersistedCorrelationIdentifier): CorrelationIdentifierEntity => {\n const identifierEntity: CorrelationIdentifierEntity = new CorrelationIdentifierEntity()\n identifierEntity.type = identifier.type\n identifierEntity.correlationId = identifier.correlationId\n identifierEntity.ownerId = identifier.ownerId\n identifierEntity.tenantId = identifier.tenantId\n\n return identifierEntity\n}\n\nexport const correlationIdentifierFrom = (identifier: CorrelationIdentifierEntity): CorrelationIdentifier => {\n const result: CorrelationIdentifier = {\n id: identifier.id,\n type: identifier.type,\n correlationId: identifier.correlationId,\n ownerId: identifier.ownerId,\n tenantId: identifier.tenantId,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const didAuthConfigEntityFrom = (config: NonPersistedDidAuthConfig): DidAuthConfigEntity => {\n let identifier: string | undefined = undefined\n if (typeof config.idOpts.identifier === 'string') {\n identifier = config.idOpts.identifier\n } else if (typeof config.idOpts.identifier === 'object') {\n if ('did' in config.idOpts.identifier && typeof config.idOpts.identifier.did === 'string') {\n identifier = config.idOpts.identifier.did\n }\n }\n if (!identifier) {\n throw Error(`Identifier method ${config.idOpts.method} not yet supported`)\n }\n const didAuthConfig: DidAuthConfigEntity = new DidAuthConfigEntity()\n didAuthConfig.identifier = identifier\n didAuthConfig.redirectUrl = config.redirectUrl\n didAuthConfig.sessionId = config.sessionId\n didAuthConfig.ownerId = config.ownerId\n didAuthConfig.tenantId = config.tenantId\n return didAuthConfig\n}\n\nexport const electronicAddressEntityFrom = (electronicAddress: NonPersistedElectronicAddress): ElectronicAddressEntity => {\n const electronicAddressEntity: ElectronicAddressEntity = new ElectronicAddressEntity()\n electronicAddressEntity.type = electronicAddress.type\n electronicAddressEntity.electronicAddress = electronicAddress.electronicAddress\n electronicAddressEntity.ownerId = electronicAddress.ownerId\n electronicAddressEntity.tenantId = electronicAddress.tenantId\n\n return electronicAddressEntity\n}\n\nexport const electronicAddressFrom = (electronicAddress: ElectronicAddressEntity): ElectronicAddress => {\n const result: ElectronicAddress = {\n id: electronicAddress.id,\n type: electronicAddress.type,\n electronicAddress: electronicAddress.electronicAddress,\n ownerId: electronicAddress.ownerId,\n tenantId: electronicAddress.tenantId,\n createdAt: electronicAddress.createdAt,\n lastUpdatedAt: electronicAddress.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const physicalAddressEntityFrom = (physicalAddress: NonPersistedPhysicalAddress): PhysicalAddressEntity => {\n const physicalAddressEntity: PhysicalAddressEntity = new PhysicalAddressEntity()\n physicalAddressEntity.type = physicalAddress.type\n physicalAddressEntity.streetName = physicalAddress.streetName\n physicalAddressEntity.streetNumber = physicalAddress.streetNumber\n physicalAddressEntity.postalCode = physicalAddress.postalCode\n physicalAddressEntity.cityName = physicalAddress.cityName\n physicalAddressEntity.provinceName = physicalAddress.provinceName\n physicalAddressEntity.countryCode = physicalAddress.countryCode\n physicalAddressEntity.buildingName = physicalAddress.buildingName\n physicalAddressEntity.ownerId = physicalAddress.ownerId\n physicalAddressEntity.tenantId = physicalAddress.tenantId\n\n return physicalAddressEntity\n}\n\nexport const physicalAddressFrom = (physicalAddress: PhysicalAddressEntity): PhysicalAddress => {\n const result: PhysicalAddress = {\n id: physicalAddress.id,\n type: physicalAddress.type,\n streetName: physicalAddress.streetName,\n streetNumber: physicalAddress.streetNumber,\n postalCode: physicalAddress.postalCode,\n cityName: physicalAddress.cityName,\n provinceName: physicalAddress.provinceName,\n countryCode: physicalAddress.countryCode,\n buildingName: physicalAddress.buildingName,\n ownerId: physicalAddress.ownerId,\n tenantId: physicalAddress.tenantId,\n createdAt: physicalAddress.createdAt,\n lastUpdatedAt: physicalAddress.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const identityEntityFrom = (entity: NonPersistedIdentity): IdentityEntity => {\n const identityEntity: IdentityEntity = new IdentityEntity()\n identityEntity.alias = entity.alias\n identityEntity.origin = entity.origin\n identityEntity.ownerId = entity.ownerId\n identityEntity.tenantId = entity.tenantId\n identityEntity.roles = entity.roles\n identityEntity.identifier = correlationIdentifierEntityFrom(entity.identifier)\n identityEntity.connection = entity.connection ? connectionEntityFrom(entity.connection) : undefined\n identityEntity.metadata = entity.metadata\n ? entity.metadata.map(identityMetadataItemEntityFrom).filter((entity): entity is IdentityMetadataItemEntity => entity !== undefined)\n : []\n return identityEntity\n}\n\nexport const identityFrom = (identity: IdentityEntity): Identity => {\n const result: Identity = {\n id: identity.id,\n alias: identity.alias,\n origin: identity.origin,\n roles: identity.roles,\n tenantId: identity.tenantId,\n ownerId: identity.ownerId,\n identifier: correlationIdentifierFrom(identity.identifier),\n ...(identity.connection && { connection: connectionFrom(identity.connection) }),\n metadata: identity.metadata ? identity.metadata.map((item: IdentityMetadataItemEntity) => metadataItemFrom(item)) : [],\n createdAt: identity.createdAt,\n lastUpdatedAt: identity.createdAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nconst metadataItemEntityFrom = <T extends MetadataTypes, U extends { new (): any }>(\n item: NonPersistedMetadataItem<T>,\n EntityClass: U,\n): InstanceType<U> | undefined => {\n const { label, value } = item\n\n if (value === null || value === undefined) {\n return undefined\n }\n\n const metadataItemEntity = new EntityClass()\n metadataItemEntity.label = label\n metadataItemEntity.valueType = typeof value\n\n switch (typeof value) {\n case 'undefined':\n return undefined\n case 'string':\n metadataItemEntity.stringValue = value\n break\n case 'number':\n metadataItemEntity.numberValue = value\n break\n case 'boolean':\n metadataItemEntity.boolValue = value\n break\n case 'object':\n metadataItemEntity.valueType = Object.prototype.toString.call(value).slice(8, -1)\n if (value instanceof Date) {\n metadataItemEntity.dateValue = value\n } else {\n // For now, we only support / implement not-primitive type Date in the entity\n throw new Error(`Unsupported object type: ${metadataItemEntity.valueType} for value ${value}`)\n }\n break\n }\n return metadataItemEntity\n}\n\nexport const identityMetadataItemEntityFrom = (item: NonPersistedMetadataItem<MetadataTypes>): IdentityMetadataItemEntity | undefined => {\n return metadataItemEntityFrom(item, IdentityMetadataItemEntity)\n}\n\nexport const contactMetadataItemEntityFrom = (item: NonPersistedMetadataItem<MetadataTypes>): ContactMetadataItemEntity | undefined => {\n return metadataItemEntityFrom(item, ContactMetadataItemEntity)\n}\n\nexport const metadataItemFrom = (entity: IdentityMetadataItemEntity | ContactMetadataItemEntity): MetadataItem<MetadataTypes> => {\n const item: Partial<MetadataItem<MetadataTypes>> = {\n id: entity.id,\n label: entity.label,\n }\n switch (entity.valueType) {\n case 'string':\n item.value = entity.stringValue\n break\n case 'number':\n item.value = entity.numberValue\n break\n case 'Date':\n item.value = entity.dateValue\n break\n case 'boolean':\n item.value = entity.boolValue\n break\n default:\n throw new Error(`Unsupported valueType ${entity.valueType}`)\n }\n return item as MetadataItem<MetadataTypes>\n}\n\nexport const naturalPersonEntityFrom = (naturalPerson: NonPersistedNaturalPerson): NaturalPersonEntity => {\n const naturalPersonEntity: NaturalPersonEntity = new NaturalPersonEntity()\n naturalPersonEntity.firstName = naturalPerson.firstName\n naturalPersonEntity.middleName = naturalPerson.middleName\n naturalPersonEntity.lastName = naturalPerson.lastName\n naturalPersonEntity.displayName = naturalPerson.displayName\n naturalPersonEntity.ownerId = naturalPerson.ownerId\n naturalPersonEntity.tenantId = naturalPerson.tenantId\n naturalPersonEntity.metadata = naturalPerson.metadata\n ? naturalPerson.metadata.map(contactMetadataItemEntityFrom).filter((entity): entity is ContactMetadataItemEntity => entity !== undefined)\n : []\n\n return naturalPersonEntity\n}\n\nexport const naturalPersonFrom = (naturalPerson: NaturalPersonEntity): NaturalPerson => {\n const result: NaturalPerson = {\n id: naturalPerson.id,\n firstName: naturalPerson.firstName,\n middleName: naturalPerson.middleName,\n lastName: naturalPerson.lastName,\n displayName: naturalPerson.displayName,\n metadata: naturalPerson.metadata ? naturalPerson.metadata.map((item: ContactMetadataItemEntity) => metadataItemFrom(item)) : [],\n ownerId: naturalPerson.ownerId,\n tenantId: naturalPerson.tenantId,\n createdAt: naturalPerson.createdAt,\n lastUpdatedAt: naturalPerson.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const openIdConfigEntityFrom = (config: NonPersistedOpenIdConfig): OpenIdConfigEntity => {\n const openIdConfig: OpenIdConfigEntity = new OpenIdConfigEntity()\n openIdConfig.clientId = config.clientId\n openIdConfig.clientSecret = config.clientSecret\n openIdConfig.scopes = config.scopes\n openIdConfig.issuer = config.issuer\n openIdConfig.redirectUrl = config.redirectUrl\n openIdConfig.dangerouslyAllowInsecureHttpRequests = config.dangerouslyAllowInsecureHttpRequests\n openIdConfig.clientAuthMethod = config.clientAuthMethod\n openIdConfig.ownerId = config.ownerId\n openIdConfig.tenantId = config.tenantId\n\n return openIdConfig\n}\n\nexport const organizationEntityFrom = (organization: NonPersistedOrganization): OrganizationEntity => {\n const organizationEntity: OrganizationEntity = new OrganizationEntity()\n organizationEntity.legalName = organization.legalName\n organizationEntity.displayName = organization.displayName\n organizationEntity.ownerId = organization.ownerId\n organizationEntity.tenantId = organization.tenantId\n organizationEntity.metadata = organization.metadata\n ? organization.metadata.map(contactMetadataItemEntityFrom).filter((entity): entity is ContactMetadataItemEntity => entity !== undefined)\n : []\n\n return organizationEntity\n}\n\nexport const organizationFrom = (organization: OrganizationEntity): Organization => {\n const result: Organization = {\n id: organization.id,\n legalName: organization.legalName,\n displayName: organization.displayName,\n metadata: organization.metadata ? organization.metadata.map((item: ContactMetadataItemEntity) => metadataItemFrom(item)) : [],\n ownerId: organization.ownerId,\n tenantId: organization.tenantId,\n createdAt: organization.createdAt,\n lastUpdatedAt: organization.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const partyRelationshipEntityFrom = (relationship: NonPersistedPartyRelationship): PartyRelationshipEntity => {\n const partyRelationshipEntity: PartyRelationshipEntity = new PartyRelationshipEntity()\n partyRelationshipEntity.leftId = relationship.leftId\n partyRelationshipEntity.rightId = relationship.rightId\n partyRelationshipEntity.ownerId = relationship.ownerId\n partyRelationshipEntity.tenantId = relationship.tenantId\n\n return partyRelationshipEntity\n}\n\nexport const partyRelationshipFrom = (relationship: PartyRelationshipEntity): PartyRelationship => {\n const result: PartyRelationship = {\n id: relationship.id,\n leftId: relationship.leftId,\n rightId: relationship.rightId,\n ownerId: relationship.ownerId,\n tenantId: relationship.tenantId,\n createdAt: relationship.createdAt,\n lastUpdatedAt: relationship.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const partyTypeEntityFrom = (args: NonPersistedPartyType): PartyTypeEntity => {\n const partyTypeEntity: PartyTypeEntity = new PartyTypeEntity()\n if (args.id) {\n partyTypeEntity.id = args.id\n }\n partyTypeEntity.type = args.type\n partyTypeEntity.origin = args.origin\n partyTypeEntity.name = args.name\n partyTypeEntity.description = args.description\n partyTypeEntity.tenantId = args.tenantId\n\n return partyTypeEntity\n}\n\nexport const partyTypeFrom = (partyType: PartyTypeEntity): PartyType => {\n const result: PartyType = {\n id: partyType.id,\n type: partyType.type,\n origin: partyType.origin,\n name: partyType.name,\n tenantId: partyType.tenantId,\n description: partyType.description,\n createdAt: partyType.createdAt,\n lastUpdatedAt: partyType.lastUpdatedAt,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const configFrom = (config: BaseConfigEntity): ConnectionConfig => {\n if (isOpenIdConfig(config)) {\n return openIdConfigFrom(<OpenIdConfigEntity>config)\n } else if (isDidAuthConfig(config)) {\n return didAuthConfigFrom(<DidAuthConfigEntity>config)\n }\n\n throw new Error('config type not supported')\n}\n\nexport const openIdConfigFrom = (config: OpenIdConfigEntity): OpenIdConfig => {\n const result: OpenIdConfig = {\n id: config.id,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n scopes: config.scopes,\n issuer: config.issuer,\n redirectUrl: config.redirectUrl,\n dangerouslyAllowInsecureHttpRequests: config.dangerouslyAllowInsecureHttpRequests,\n clientAuthMethod: config.clientAuthMethod,\n ownerId: config.ownerId,\n tenantId: config.tenantId,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const didAuthConfigFrom = (config: DidAuthConfigEntity): DidAuthConfig => {\n const result: DidAuthConfig = {\n id: config.id,\n idOpts: { identifier: config.identifier },\n stateId: '', // FIXME\n redirectUrl: config.redirectUrl,\n sessionId: config.sessionId,\n ownerId: config.ownerId,\n tenantId: config.tenantId,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const isOpenIdConfig = (config: NonPersistedConnectionConfig | BaseConfigEntity): config is OpenIdConfig | OpenIdConfigEntity =>\n 'clientSecret' in config && 'issuer' in config && 'redirectUrl' in config\n\nexport const isDidAuthConfig = (config: NonPersistedConnectionConfig | BaseConfigEntity): config is DidAuthConfig | DidAuthConfigEntity =>\n ('identifier' in config || ('idOpts' in config && 'identifier' in config.idOpts)) && 'redirectUrl' in config && 'sessionId' in config\n","import {\n AbstractDigitalCredentialStore,\n AddCredentialArgs,\n CredentialStateType,\n DigitalCredential,\n GetCredentialArgs,\n GetCredentialsArgs,\n GetCredentialsResponse,\n NonPersistedDigitalCredential,\n RemoveCredentialArgs,\n UpdateCredentialArgs,\n UpdateCredentialStateArgs,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { CredentialRole, OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { DataSource, type FindOptionsOrder, type FindOptionsWhere, LessThanOrEqual, Repository } from 'typeorm'\n\nimport {\n digitalCredentialFrom,\n digitalCredentialsFrom,\n nonPersistedDigitalCredentialEntityFromAddArgs,\n persistedDigitalCredentialEntityFromStateArgs,\n persistedDigitalCredentialEntityFromUpdateArgs,\n} from '../../src'\nimport { DigitalCredentialEntity } from '../entities/digitalCredential/DigitalCredentialEntity'\nimport { parseAndValidateOrderOptions } from '../utils/SortingUtils'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:credential-store')\n\nexport class DigitalCredentialStore extends AbstractDigitalCredentialStore {\n private readonly dbConnection: OrPromise<DataSource>\n private dcRepo: Repository<DigitalCredentialEntity> | undefined\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n addCredential = async (args: AddCredentialArgs): Promise<DigitalCredential> => {\n debug('Adding credential', args)\n const credentialEntity: NonPersistedDigitalCredential = nonPersistedDigitalCredentialEntityFromAddArgs(args)\n const validationError = this.assertValidDigitalCredential(credentialEntity)\n if (validationError) {\n return Promise.reject(validationError)\n }\n const dcRepo = await this.getRepository()\n const createdResult: DigitalCredentialEntity = await dcRepo.save(credentialEntity)\n return Promise.resolve(digitalCredentialFrom(createdResult))\n }\n\n getCredential = async (args: GetCredentialArgs): Promise<DigitalCredential> => {\n const dcRepo = await this.getRepository()\n const result: DigitalCredentialEntity | null = await dcRepo.findOne({\n where: args,\n })\n\n if (!result) {\n return Promise.reject(Error(`No credential found for arg: ${JSON.stringify(args)}`))\n }\n return digitalCredentialFrom(result)\n }\n\n getCredentials = async (args?: GetCredentialsArgs): Promise<GetCredentialsResponse> => {\n const { filter = {}, offset, limit, order = 'createdAt.asc' } = args ?? {}\n const sortOptions: FindOptionsOrder<DigitalCredentialEntity> =\n order && typeof order === 'string'\n ? parseAndValidateOrderOptions<DigitalCredentialEntity>(order)\n : <FindOptionsOrder<DigitalCredentialEntity>>order\n const dcRepo = await this.getRepository()\n\n // Process filter to convert linkedVpUntil dates into LessThanOrEqual operators\n const processLinkedVpUntil = (filterItem: Partial<DigitalCredential>): FindOptionsWhere<DigitalCredentialEntity> => {\n const processed = { ...filterItem } as FindOptionsWhere<DigitalCredentialEntity>\n if (filterItem.linkedVpUntil) {\n processed.linkedVpUntil = LessThanOrEqual(filterItem.linkedVpUntil)\n }\n return processed\n }\n\n let whereClause: FindOptionsWhere<DigitalCredentialEntity> | FindOptionsWhere<DigitalCredentialEntity>[]\n\n if (Array.isArray(filter) && filter.length > 0) {\n whereClause = filter.map(processLinkedVpUntil)\n } else if (Object.keys(filter).length > 0) {\n whereClause = processLinkedVpUntil(filter as Partial<DigitalCredential>)\n } else {\n whereClause = filter as FindOptionsWhere<DigitalCredentialEntity>\n }\n\n const [result, total] = await dcRepo.findAndCount({\n where: whereClause,\n skip: offset,\n take: limit,\n order: sortOptions,\n })\n return {\n data: digitalCredentialsFrom(result),\n total,\n }\n }\n\n updateCredential = async (args: UpdateCredentialArgs): Promise<DigitalCredential> => {\n const dcRepo = await this.getRepository()\n const whereClause: Record<string, any> = {}\n\n if ('id' in args) {\n whereClause.id = args.id\n } else if ('hash' in args) {\n whereClause.hash = args.hash\n } else {\n return Promise.reject(Error('No id or hash param is provided.'))\n }\n\n const credential: DigitalCredentialEntity | null = await dcRepo.findOne({\n where: whereClause,\n })\n\n if (!credential) {\n return Promise.reject(Error(`No credential found for args: ${JSON.stringify(whereClause)}`))\n }\n\n // Extract updates by removing the identifier fields\n const updates = Object.fromEntries(Object.entries(args).filter(([key]) => key !== 'id' && key !== 'hash')) as Partial<DigitalCredential>\n\n const entityToSave = persistedDigitalCredentialEntityFromUpdateArgs(credential, updates)\n\n const validationError = this.assertValidDigitalCredential(entityToSave)\n if (validationError) {\n return Promise.reject(validationError)\n }\n\n debug('Updating credential', entityToSave)\n const updatedResult = await dcRepo.save(entityToSave as any, { transaction: true })\n return digitalCredentialFrom(updatedResult)\n }\n\n removeCredential = async (args: RemoveCredentialArgs): Promise<boolean> => {\n if (!args) {\n return false\n }\n\n const query: FindOptionsWhere<DigitalCredentialEntity> = {}\n\n if ('id' in args) {\n query.id = args.id\n } else if ('hash' in args) {\n query.hash = args.hash\n } else {\n return false\n }\n try {\n const dcRepo = await this.getRepository()\n // TODO create a flag whether we want to delete recursively or return an error when there are child credentials?\n const affected = await this.deleteTree(dcRepo, query)\n return affected > 0\n } catch (error) {\n console.error('Error removing digital credential:', error)\n return false\n }\n }\n\n private async deleteTree(dcRepo: Repository<DigitalCredentialEntity>, query: FindOptionsWhere<DigitalCredentialEntity>): Promise<number> {\n let affected: number = 0\n const findResult = await dcRepo.findBy(query)\n for (const dc of findResult) {\n affected += await this.deleteTree(dcRepo, { parentId: dc.id })\n const result = await dcRepo.delete(dc.id)\n if (result.affected) {\n affected += result.affected\n }\n }\n return affected\n }\n\n private async getRepository(): Promise<Repository<DigitalCredentialEntity>> {\n if (this.dcRepo !== undefined) {\n return Promise.resolve(this.dcRepo)\n }\n this.dcRepo = (await this.dbConnection).getRepository(DigitalCredentialEntity)\n if (this.dcRepo === undefined) {\n return Promise.reject(Error('Could not get DigitalCredentialEntity repository'))\n }\n return this.dcRepo\n }\n\n updateCredentialState = async (args: UpdateCredentialStateArgs): Promise<DigitalCredential> => {\n const credentialRepository: Repository<DigitalCredentialEntity> = (await this.dbConnection).getRepository(DigitalCredentialEntity)\n const whereClause: Record<string, any> = {}\n if ('id' in args) {\n whereClause.id = args.id\n } else if ('hash' in args) {\n whereClause.hash = args.hash\n } else {\n throw new Error('No id or hash param is provided.')\n }\n if (!args.verifiedState) {\n throw new Error('No verifiedState param is provided.')\n }\n if (args.verifiedState === CredentialStateType.REVOKED && !args.revokedAt) {\n throw new Error('No revokedAt param is provided.')\n }\n if (args.verifiedState !== CredentialStateType.REVOKED && !args.verifiedAt) {\n throw new Error('No verifiedAt param is provided.')\n }\n const credential: DigitalCredentialEntity | null = await credentialRepository.findOne({\n where: whereClause,\n })\n\n if (!credential) {\n return Promise.reject(Error(`No credential found for args: ${JSON.stringify(whereClause)}`))\n }\n\n // Create entity with state updates applied\n const entityToSave = persistedDigitalCredentialEntityFromStateArgs(credential, args)\n\n debug('Updating credential state', entityToSave)\n const updatedResult: DigitalCredentialEntity = await credentialRepository.save(entityToSave as any, { transaction: true })\n return digitalCredentialFrom(updatedResult)\n }\n\n private assertValidDigitalCredential(credentialEntity: NonPersistedDigitalCredential | DigitalCredentialEntity): Error | undefined {\n const { kmsKeyRef, identifierMethod, credentialRole, isIssuerSigned } = credentialEntity\n\n const isRoleInvalid = credentialRole === CredentialRole.ISSUER || (credentialRole === CredentialRole.HOLDER && !isIssuerSigned)\n\n if (isRoleInvalid && (!kmsKeyRef || !identifierMethod)) {\n const missingFields = []\n\n if (!kmsKeyRef) missingFields.push('kmsKeyRef')\n if (!identifierMethod) missingFields.push('identifierMethod')\n\n const fields = missingFields.join(' and ')\n return new Error(\n `DigitalCredential field(s) ${fields} is/are required for credential role ${credentialRole} with isIssuerSigned=${isIssuerSigned}.`,\n )\n }\n\n return undefined\n }\n}\n","import { BaseEntity, type FindOptionsOrder } from 'typeorm'\n\nexport const parseAndValidateOrderOptions = <T extends BaseEntity>(order: string): FindOptionsOrder<T> => {\n const orderPairs = order.split(',').map((pair) => pair.trim().split('.'))\n const orderOptions: FindOptionsOrder<T> = {}\n\n orderPairs.forEach(([field, direction]) => {\n const dir = direction.toUpperCase()\n if (dir !== 'ASC' && dir !== 'DESC') {\n throw new Error(`Invalid order direction: '${direction}'. Must be 'asc' or 'desc'.`)\n }\n ;(orderOptions as any)[field] = dir\n })\n\n return orderOptions\n}\n","import type {\n IAddCredentialBrandingArgs,\n IAddCredentialLocaleBrandingArgs,\n IAddIssuerBrandingArgs,\n IAddIssuerLocaleBrandingArgs,\n IBasicCredentialLocaleBranding,\n IBasicIssuerLocaleBranding,\n ICredentialBranding,\n ICredentialBrandingFilter,\n ICredentialLocaleBranding,\n ICredentialLocaleBrandingFilter,\n IGetCredentialBrandingArgs,\n IGetCredentialLocaleBrandingArgs,\n IGetIssuerBrandingArgs,\n IGetIssuerLocaleBrandingArgs,\n IIssuerBranding,\n IIssuerBrandingFilter,\n IIssuerLocaleBranding,\n IIssuerLocaleBrandingFilter,\n IPartialCredentialBranding,\n IRemoveCredentialBrandingArgs,\n IRemoveCredentialLocaleBrandingArgs,\n IRemoveIssuerBrandingArgs,\n IRemoveIssuerLocaleBrandingArgs,\n IUpdateCredentialBrandingArgs,\n IUpdateCredentialLocaleBrandingArgs,\n IUpdateIssuerBrandingArgs,\n IUpdateIssuerLocaleBrandingArgs,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { AbstractIssuanceBrandingStore } from '@sphereon/ssi-sdk.data-store-types'\nimport { type OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { DataSource, type DeleteResult, In, Not, type Repository } from 'typeorm'\nimport { BackgroundAttributesEntity } from '../entities/issuanceBranding/BackgroundAttributesEntity'\nimport { BaseLocaleBrandingEntity } from '../entities/issuanceBranding/BaseLocaleBrandingEntity'\nimport { CredentialBrandingEntity } from '../entities/issuanceBranding/CredentialBrandingEntity'\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 {\n credentialBrandingEntityFrom,\n credentialBrandingFrom,\n credentialLocaleBrandingEntityFrom,\n issuerBrandingEntityFrom,\n issuerBrandingFrom,\n issuerLocaleBrandingEntityFrom,\n localeBrandingFrom,\n} from '../utils/issuanceBranding/MappingUtils'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:issuance-branding-store')\n\nexport class IssuanceBrandingStore extends AbstractIssuanceBrandingStore {\n private readonly dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n public addCredentialBranding = async (args: IAddCredentialBrandingArgs): Promise<ICredentialBranding> => {\n const { localeBranding, vcHash } = args\n const repository: Repository<CredentialBrandingEntity> = (await this.dbConnection).getRepository(CredentialBrandingEntity)\n const result: CredentialBrandingEntity | null = await repository.findOne({\n where: [{ vcHash }],\n })\n\n if (result) {\n return Promise.reject(Error(`Credential branding already present for vc with hash: ${vcHash}`))\n }\n\n if (await this.hasDuplicateLocales(localeBranding)) {\n return Promise.reject(Error(`Credential branding contains duplicate locales`))\n }\n\n const credentialBrandingEntity: CredentialBrandingEntity = credentialBrandingEntityFrom(args)\n debug('Adding credential branding', credentialBrandingEntity)\n const createdResult: CredentialBrandingEntity = await repository.save(credentialBrandingEntity)\n\n return credentialBrandingFrom(createdResult)\n }\n\n public getCredentialBranding = async (args?: IGetCredentialBrandingArgs): Promise<Array<ICredentialBranding>> => {\n const { filter } = args ?? {}\n if (filter) {\n filter.forEach((filter: IPartialCredentialBranding): void => {\n if (filter.localeBranding && 'locale' in filter.localeBranding && filter.localeBranding.locale === undefined) {\n filter.localeBranding.locale = ''\n }\n })\n }\n\n debug('Getting credential branding', args)\n const result: Array<CredentialBrandingEntity> = await (await this.dbConnection).getRepository(CredentialBrandingEntity).find({\n ...(filter && { where: filter }),\n })\n\n return result.map((credentialBranding: CredentialBrandingEntity) => credentialBrandingFrom(credentialBranding))\n }\n\n public removeCredentialBranding = async (args: IRemoveCredentialBrandingArgs): Promise<void> => {\n const { filter } = args\n const repository: Repository<CredentialBrandingEntity> = (await this.dbConnection).getRepository(CredentialBrandingEntity)\n const credentialBranding: Array<CredentialBrandingEntity> = await repository.find({\n where: filter,\n })\n\n debug('Removing credential locale branding', args)\n const localeBrandingDeletions: Array<Array<Promise<void>>> = credentialBranding.map((credentialBranding: CredentialBrandingEntity) =>\n credentialBranding.localeBranding.map(\n async (localeBranding: CredentialLocaleBrandingEntity): Promise<void> => this.removeLocaleBranding(localeBranding),\n ),\n )\n await Promise.all(localeBrandingDeletions)\n\n debug('Removing credential branding', args)\n const credentialBrandingDeletions: Array<Promise<DeleteResult>> = filter.map(\n async (filter: ICredentialBrandingFilter): Promise<DeleteResult> => await repository.delete(filter),\n )\n await Promise.all(credentialBrandingDeletions)\n }\n\n public updateCredentialBranding = async (args: IUpdateCredentialBrandingArgs): Promise<ICredentialBranding> => {\n const { credentialBranding } = args\n const repository: Repository<CredentialBrandingEntity> = (await this.dbConnection).getRepository(CredentialBrandingEntity)\n const credentialBrandingEntity: CredentialBrandingEntity | null = await repository.findOne({\n where: { id: credentialBranding.id },\n })\n\n if (!credentialBrandingEntity) {\n return Promise.reject(Error(`No credential branding found for id: ${credentialBranding.id}`))\n }\n\n const branding: Omit<ICredentialBranding, 'createdAt' | 'lastUpdatedAt'> = {\n ...credentialBranding,\n localeBranding: credentialBrandingEntity.localeBranding,\n }\n\n debug('Updating credential branding', branding)\n const result: CredentialBrandingEntity = await repository.save(branding, { transaction: true })\n\n return credentialBrandingFrom(result)\n }\n\n public addCredentialLocaleBranding = async (args: IAddCredentialLocaleBrandingArgs): Promise<ICredentialBranding> => {\n const { credentialBrandingId, localeBranding } = args\n const credentialBrandingRepository: Repository<CredentialBrandingEntity> = (await this.dbConnection).getRepository(CredentialBrandingEntity)\n const credentialBranding: CredentialBrandingEntity | null = await credentialBrandingRepository.findOne({\n where: { id: credentialBrandingId },\n })\n\n if (!credentialBranding) {\n return Promise.reject(Error(`No credential branding found for id: ${credentialBrandingId}`))\n }\n\n const locales: Array<CredentialLocaleBrandingEntity> | null = await (await this.dbConnection).getRepository(CredentialLocaleBrandingEntity).find({\n where: {\n credentialBranding: {\n id: credentialBrandingId,\n },\n locale: In(localeBranding.map((localeBranding: IBasicCredentialLocaleBranding) => localeBranding.locale)),\n },\n })\n\n if (locales && locales.length > 0) {\n return Promise.reject(\n Error(\n `Credential branding already contains locales: ${locales?.map(\n (credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity) => credentialLocaleBrandingEntity.locale,\n )}`,\n ),\n )\n }\n\n const credentialLocaleBrandingRepository: Repository<CredentialLocaleBrandingEntity> = (await this.dbConnection).getRepository(\n CredentialLocaleBrandingEntity,\n )\n const addCredentialLocaleBranding: Array<Promise<void>> = localeBranding.map(\n async (localeBranding: IBasicCredentialLocaleBranding): Promise<void> => {\n const credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity = credentialLocaleBrandingEntityFrom(localeBranding)\n debug('Adding credential locale branding', credentialLocaleBrandingEntity)\n credentialLocaleBrandingEntity.credentialBranding = credentialBranding\n await credentialLocaleBrandingRepository.save(credentialLocaleBrandingEntity, { transaction: true })\n },\n )\n\n await Promise.all(addCredentialLocaleBranding)\n\n const result: CredentialBrandingEntity | null = await credentialBrandingRepository.findOne({\n where: { id: credentialBrandingId },\n })\n\n if (!result) {\n return Promise.reject(Error('Unable to get updated credential branding'))\n }\n\n return credentialBrandingFrom(result)\n }\n\n public getCredentialLocaleBranding = async (args?: IGetCredentialLocaleBrandingArgs): Promise<Array<ICredentialLocaleBranding>> => {\n const { filter } = args ?? {}\n if (filter) {\n filter.forEach((filter: ICredentialLocaleBrandingFilter): void => {\n if ('locale' in filter && filter.locale === undefined) {\n filter.locale = ''\n }\n })\n }\n\n debug('Getting credential locale branding', args)\n const credentialBrandingLocale: Array<CredentialLocaleBrandingEntity> | null = await (await this.dbConnection)\n .getRepository(CredentialLocaleBrandingEntity)\n .find({\n ...(filter && { where: filter }),\n })\n\n return credentialBrandingLocale\n ? credentialBrandingLocale.map(\n (credentialLocaleBranding: CredentialLocaleBrandingEntity) => localeBrandingFrom(credentialLocaleBranding) as ICredentialLocaleBranding,\n )\n : []\n }\n\n public removeCredentialLocaleBranding = async (args: IRemoveCredentialLocaleBrandingArgs): Promise<void> => {\n const { filter } = args\n const credentialLocaleBranding: Array<CredentialLocaleBrandingEntity> = await (await this.dbConnection)\n .getRepository(CredentialLocaleBrandingEntity)\n .find({\n where: filter,\n })\n\n debug('Removing credential locale branding', args)\n const localeBrandingDeletions: Array<Promise<void>> = credentialLocaleBranding.map(\n async (localeBranding: CredentialLocaleBrandingEntity): Promise<void> => this.removeLocaleBranding(localeBranding),\n )\n await Promise.all(localeBrandingDeletions)\n }\n\n public updateCredentialLocaleBranding = async (args: IUpdateCredentialLocaleBrandingArgs): Promise<ICredentialLocaleBranding> => {\n const { localeBranding } = args\n const repository: Repository<CredentialLocaleBrandingEntity> = (await this.dbConnection).getRepository(CredentialLocaleBrandingEntity)\n const result: CredentialLocaleBrandingEntity | null = await repository.findOne({\n where: { id: localeBranding.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No credential locale branding found for id: ${localeBranding.id}`))\n }\n\n const locales: Array<CredentialLocaleBrandingEntity> | null = await repository.find({\n where: {\n credentialBranding: {\n id: result.credentialBrandingId,\n },\n id: Not(In([localeBranding.id])),\n locale: localeBranding.locale,\n },\n })\n\n if (locales && locales.length > 0) {\n return Promise.reject(Error(`Credential branding: ${result.credentialBrandingId} already contains locale: ${localeBranding.locale}`))\n }\n\n debug('Updating credential locale branding', localeBranding)\n const updatedResult: CredentialLocaleBrandingEntity = await repository.save(localeBranding, { transaction: true })\n\n return localeBrandingFrom(updatedResult) as ICredentialLocaleBranding\n }\n\n public addIssuerBranding = async (args: IAddIssuerBrandingArgs): Promise<IIssuerBranding> => {\n const { localeBranding, issuerCorrelationId } = args\n const repository: Repository<IssuerBrandingEntity> = (await this.dbConnection).getRepository(IssuerBrandingEntity)\n const result: IssuerBrandingEntity | null = await repository.findOne({\n where: [{ issuerCorrelationId }],\n })\n\n if (result) {\n return Promise.reject(Error(`Issuer branding already present for issuer with correlation id: ${issuerCorrelationId}`))\n }\n\n if (await this.hasDuplicateLocales(localeBranding)) {\n return Promise.reject(Error(`Issuer branding contains duplicate locales`))\n }\n\n const issuerBrandingEntity: IssuerBrandingEntity = issuerBrandingEntityFrom(args)\n debug('Adding issuer branding', issuerBrandingEntity)\n const createdResult: IssuerBrandingEntity = await repository.save(issuerBrandingEntity)\n\n return issuerBrandingFrom(createdResult)\n }\n\n public getIssuerBranding = async (args?: IGetIssuerBrandingArgs): Promise<Array<IIssuerBranding>> => {\n const { filter } = args ?? {}\n if (filter) {\n filter.forEach((filter: IIssuerBrandingFilter): void => {\n if (filter.localeBranding && 'locale' in filter.localeBranding && filter.localeBranding.locale === undefined) {\n filter.localeBranding.locale = ''\n }\n })\n }\n\n debug('Getting issuer branding', args)\n const result: Array<IssuerBrandingEntity> = await (await this.dbConnection).getRepository(IssuerBrandingEntity).find({\n ...(filter && { where: filter }),\n })\n\n return result.map((issuerBranding: IssuerBrandingEntity) => issuerBrandingFrom(issuerBranding))\n }\n\n public removeIssuerBranding = async (args: IRemoveIssuerBrandingArgs): Promise<void> => {\n const { filter } = args\n const repository: Repository<IssuerBrandingEntity> = (await this.dbConnection).getRepository(IssuerBrandingEntity)\n const issuerBranding: Array<IssuerBrandingEntity> = await repository.find({\n where: filter,\n })\n\n debug('Removing issuer locale branding', args)\n const localeBrandingDeletions: Array<Array<Promise<void>>> = issuerBranding.map((issuerBranding: IssuerBrandingEntity) =>\n issuerBranding.localeBranding.map(\n async (localeBranding: IssuerLocaleBrandingEntity): Promise<void> => this.removeLocaleBranding(localeBranding),\n ),\n )\n await Promise.all(localeBrandingDeletions)\n\n debug('Removing issuer branding', args)\n const issuerBrandingDeletions: Array<Promise<DeleteResult>> = filter.map(\n async (filter: IIssuerBrandingFilter): Promise<DeleteResult> => await repository.delete(filter),\n )\n await Promise.all(issuerBrandingDeletions)\n }\n\n public updateIssuerBranding = async (args: IUpdateIssuerBrandingArgs): Promise<IIssuerBranding> => {\n const { issuerBranding } = args\n const repository: Repository<IssuerBrandingEntity> = (await this.dbConnection).getRepository(IssuerBrandingEntity)\n const issuerBrandingEntity: IssuerBrandingEntity | null = await repository.findOne({\n where: { id: issuerBranding.id },\n })\n\n if (!issuerBrandingEntity) {\n return Promise.reject(Error(`No issuer branding found for id: ${issuerBranding.id}`))\n }\n\n const branding: Omit<IIssuerBranding, 'createdAt' | 'lastUpdatedAt'> = {\n ...issuerBranding,\n localeBranding: issuerBrandingEntity.localeBranding,\n }\n\n debug('Updating issuer branding', branding)\n const result: IssuerBrandingEntity = await repository.save(branding, { transaction: true })\n\n return issuerBrandingFrom(result)\n }\n\n public addIssuerLocaleBranding = async (args: IAddIssuerLocaleBrandingArgs): Promise<IIssuerBranding> => {\n const { localeBranding, issuerBrandingId } = args\n const issuerBrandingRepository: Repository<IssuerBrandingEntity> = (await this.dbConnection).getRepository(IssuerBrandingEntity)\n const issuerBranding: IssuerBrandingEntity | null = await issuerBrandingRepository.findOne({\n where: { id: issuerBrandingId },\n })\n\n if (!issuerBranding) {\n return Promise.reject(Error(`No issuer branding found for id: ${issuerBrandingId}`))\n }\n\n const locales: Array<IssuerLocaleBrandingEntity> | null = await (await this.dbConnection).getRepository(IssuerLocaleBrandingEntity).find({\n where: {\n issuerBranding: {\n id: issuerBrandingId,\n },\n locale: In(localeBranding.map((localeBranding: IBasicIssuerLocaleBranding) => localeBranding.locale)),\n },\n })\n\n if (locales && locales.length > 0) {\n return Promise.reject(\n Error(\n `Issuer branding already contains locales: ${locales?.map(\n (issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity) => issuerLocaleBrandingEntity.locale,\n )}`,\n ),\n )\n }\n\n const issuerLocaleBrandingRepository: Repository<IssuerLocaleBrandingEntity> = (await this.dbConnection).getRepository(IssuerLocaleBrandingEntity)\n const addIssuerLocaleBranding: Array<Promise<void>> = localeBranding.map(async (localeBranding: IBasicIssuerLocaleBranding): Promise<void> => {\n const issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity = issuerLocaleBrandingEntityFrom(localeBranding)\n debug('Adding issuer locale branding', issuerLocaleBrandingEntity)\n issuerLocaleBrandingEntity.issuerBranding = issuerBranding\n await issuerLocaleBrandingRepository.save(issuerLocaleBrandingEntity, { transaction: true })\n })\n\n await Promise.all(addIssuerLocaleBranding)\n\n const result: IssuerBrandingEntity | null = await issuerBrandingRepository.findOne({\n where: { id: issuerBrandingId },\n })\n\n if (!result) {\n return Promise.reject(Error('Unable to get updated issuer branding'))\n }\n\n return issuerBrandingFrom(result)\n }\n\n public getIssuerLocaleBranding = async (args?: IGetIssuerLocaleBrandingArgs): Promise<Array<IIssuerLocaleBranding>> => {\n const { filter } = args ?? {}\n if (filter) {\n filter.forEach((filter: IIssuerLocaleBrandingFilter): void => {\n if ('locale' in filter && filter.locale === undefined) {\n filter.locale = ''\n }\n })\n }\n\n debug('Getting issuer locale branding', args)\n const issuerLocaleBranding: Array<IssuerLocaleBrandingEntity> | null = await (await this.dbConnection)\n .getRepository(IssuerLocaleBrandingEntity)\n .find({\n ...(filter && { where: filter }),\n })\n\n return issuerLocaleBranding\n ? issuerLocaleBranding.map(\n (issuerLocaleBranding: IssuerLocaleBrandingEntity) => localeBrandingFrom(issuerLocaleBranding) as IIssuerLocaleBranding,\n )\n : []\n }\n\n public removeIssuerLocaleBranding = async (args: IRemoveIssuerLocaleBrandingArgs): Promise<void> => {\n const { filter } = args\n const issuerLocaleBranding: Array<IssuerLocaleBrandingEntity> = await (await this.dbConnection).getRepository(IssuerLocaleBrandingEntity).find({\n where: filter,\n })\n\n debug('Removing credential locale branding', args)\n const localeBrandingDeletions: Array<Promise<void>> = issuerLocaleBranding.map(\n async (localeBranding: IssuerLocaleBrandingEntity): Promise<void> => this.removeLocaleBranding(localeBranding),\n )\n await Promise.all(localeBrandingDeletions)\n }\n\n public updateIssuerLocaleBranding = async (args: IUpdateIssuerLocaleBrandingArgs): Promise<IIssuerLocaleBranding> => {\n const { localeBranding } = args\n const repository: Repository<IssuerLocaleBrandingEntity> = (await this.dbConnection).getRepository(IssuerLocaleBrandingEntity)\n const result: IssuerLocaleBrandingEntity | null = await repository.findOne({\n where: { id: localeBranding.id },\n })\n\n if (!result) {\n return Promise.reject(Error(`No issuer locale branding found for id: ${localeBranding.id}`))\n }\n\n const locales: Array<IssuerLocaleBrandingEntity> | null = await repository.find({\n where: {\n issuerBranding: {\n id: result.issuerBrandingId,\n },\n id: Not(In([localeBranding.id])),\n locale: localeBranding.locale,\n },\n })\n\n if (locales && locales.length > 0) {\n return Promise.reject(Error(`Issuer branding: ${result.issuerBrandingId} already contains locale: ${localeBranding.locale}`))\n }\n\n debug('Updating issuer locale branding', localeBranding)\n const updatedResult: IssuerLocaleBrandingEntity = await repository.save(localeBranding, { transaction: true })\n\n return localeBrandingFrom(updatedResult) as IIssuerLocaleBranding\n }\n\n private hasDuplicateLocales = async (localeBranding: Array<IBasicCredentialLocaleBranding | IBasicIssuerLocaleBranding>): Promise<boolean> => {\n let seen: Set<string | undefined> = new Set()\n return localeBranding.some((localeBranding: IBasicCredentialLocaleBranding | IBasicIssuerLocaleBranding): boolean => {\n return seen.size === seen.add(localeBranding.locale).size\n })\n }\n\n private removeLocaleBranding = async (localeBranding: BaseLocaleBrandingEntity): Promise<void> => {\n debug('Removing credential locale branding', localeBranding)\n // Delete background image dimensions\n if (localeBranding.background?.image?.dimensions) {\n await (await this.dbConnection).getRepository(ImageDimensionsEntity).delete({ id: localeBranding.background?.image?.dimensions?.id })\n }\n\n // Delete background image\n if (localeBranding.background?.image) {\n await (await this.dbConnection).getRepository(ImageAttributesEntity).delete({ id: localeBranding.background?.image?.id })\n }\n\n // Delete background\n if (localeBranding.background) {\n await (await this.dbConnection).getRepository(BackgroundAttributesEntity).delete({ id: localeBranding.background?.id })\n }\n\n // Delete logo image dimensions\n if (localeBranding.logo?.dimensions) {\n await (await this.dbConnection).getRepository(ImageDimensionsEntity).delete({ id: localeBranding.logo?.dimensions?.id })\n }\n\n // Delete logo\n if (localeBranding.logo) {\n await (await this.dbConnection).getRepository(ImageAttributesEntity).delete({ id: localeBranding.logo?.id })\n }\n\n // Delete text\n if (localeBranding.text) {\n await (await this.dbConnection).getRepository(TextAttributesEntity).delete({ id: localeBranding.text?.id })\n }\n\n // Delete locale branding\n await (await this.dbConnection).getRepository(CredentialLocaleBrandingEntity).delete({ id: localeBranding.id })\n }\n}\n","import type {\n IBasicBackgroundAttributes,\n IBasicCredentialBranding,\n IBasicCredentialClaim,\n IBasicCredentialLocaleBranding,\n IBasicImageAttributes,\n IBasicImageDimensions,\n IBasicIssuerBranding,\n IBasicIssuerLocaleBranding,\n IBasicTextAttributes,\n ICredentialBranding,\n IIssuerBranding,\n ILocaleBranding,\n} from '@sphereon/ssi-sdk.data-store-types'\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 { isEmptyString } from '../../entities/validators'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const credentialBrandingFrom = (credentialBranding: CredentialBrandingEntity): ICredentialBranding => {\n const result: ICredentialBranding = {\n ...credentialBranding,\n localeBranding: credentialBranding.localeBranding.map((localeBranding: BaseLocaleBrandingEntity) => localeBrandingFrom(localeBranding)),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const issuerBrandingFrom = (issuerBranding: IssuerBrandingEntity): IIssuerBranding => {\n const result: IIssuerBranding = {\n ...issuerBranding,\n localeBranding: issuerBranding.localeBranding.map((localeBranding: BaseLocaleBrandingEntity) => localeBrandingFrom(localeBranding)),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const localeBrandingFrom = (localeBranding: BaseLocaleBrandingEntity): ILocaleBranding => {\n const result: ILocaleBranding = {\n ...localeBranding,\n locale: localeBranding.locale === '' ? undefined : localeBranding.locale,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const issuerLocaleBrandingEntityFrom = (args: IBasicIssuerLocaleBranding): IssuerLocaleBrandingEntity => {\n const issuerLocaleBrandingEntity: IssuerLocaleBrandingEntity = new IssuerLocaleBrandingEntity()\n issuerLocaleBrandingEntity.alias = isEmptyString(args.alias) ? undefined : args.alias\n issuerLocaleBrandingEntity.locale = args.locale ? args.locale : ''\n issuerLocaleBrandingEntity.logo = args.logo ? imageAttributesEntityFrom(args.logo) : undefined\n issuerLocaleBrandingEntity.description = isEmptyString(args.description) ? undefined : args.description\n issuerLocaleBrandingEntity.background = args.background ? backgroundAttributesEntityFrom(args.background) : undefined\n issuerLocaleBrandingEntity.text = args.text ? textAttributesEntityFrom(args.text) : undefined\n issuerLocaleBrandingEntity.clientUri = isEmptyString(args.clientUri) ? undefined : args.clientUri\n issuerLocaleBrandingEntity.tosUri = isEmptyString(args.tosUri) ? undefined : args.tosUri\n issuerLocaleBrandingEntity.policyUri = isEmptyString(args.policyUri) ? undefined : args.policyUri\n issuerLocaleBrandingEntity.contacts = args.contacts\n\n return issuerLocaleBrandingEntity\n}\n\nexport const backgroundAttributesEntityFrom = (args: IBasicBackgroundAttributes): BackgroundAttributesEntity => {\n const backgroundAttributesEntity: BackgroundAttributesEntity = new BackgroundAttributesEntity()\n backgroundAttributesEntity.color = isEmptyString(args.color) ? undefined : args.color\n backgroundAttributesEntity.image = args.image ? imageAttributesEntityFrom(args.image) : undefined\n\n return backgroundAttributesEntity\n}\n\nexport const credentialBrandingEntityFrom = (args: IBasicCredentialBranding): CredentialBrandingEntity => {\n const credentialBrandingEntity: CredentialBrandingEntity = new CredentialBrandingEntity()\n credentialBrandingEntity.issuerCorrelationId = args.issuerCorrelationId\n credentialBrandingEntity.vcHash = args.vcHash\n credentialBrandingEntity.localeBranding = args.localeBranding.map((localeBranding: IBasicCredentialLocaleBranding) =>\n credentialLocaleBrandingEntityFrom(localeBranding),\n )\n\n return credentialBrandingEntity\n}\n\nexport const credentialLocaleBrandingEntityFrom = (args: IBasicCredentialLocaleBranding): CredentialLocaleBrandingEntity => {\n const credentialLocaleBrandingEntity: CredentialLocaleBrandingEntity = new CredentialLocaleBrandingEntity()\n credentialLocaleBrandingEntity.alias = isEmptyString(args.alias) ? undefined : args.alias\n credentialLocaleBrandingEntity.locale = args.locale ? args.locale : ''\n credentialLocaleBrandingEntity.logo = args.logo ? imageAttributesEntityFrom(args.logo) : undefined\n credentialLocaleBrandingEntity.description = isEmptyString(args.description) ? undefined : args.description\n credentialLocaleBrandingEntity.background = args.background ? backgroundAttributesEntityFrom(args.background) : undefined\n credentialLocaleBrandingEntity.text = args.text ? textAttributesEntityFrom(args.text) : undefined\n credentialLocaleBrandingEntity.claims = args.claims ? args.claims.map((claim) => credentialClaimsEntityFrom(claim)) : []\n\n return credentialLocaleBrandingEntity\n}\n\nexport const imageAttributesEntityFrom = (args: IBasicImageAttributes): ImageAttributesEntity => {\n const imageAttributesEntity: ImageAttributesEntity = new ImageAttributesEntity()\n imageAttributesEntity.uri = isEmptyString(args.uri) ? undefined : args.uri\n imageAttributesEntity.dataUri = isEmptyString(args.dataUri) ? undefined : args.dataUri\n imageAttributesEntity.mediaType = isEmptyString(args.mediaType) ? undefined : args.mediaType\n imageAttributesEntity.alt = isEmptyString(args.alt) ? undefined : args.alt\n imageAttributesEntity.dimensions = args.dimensions ? imageDimensionsEntityFrom(args.dimensions) : undefined\n\n return imageAttributesEntity\n}\n\nexport const imageDimensionsEntityFrom = (args: IBasicImageDimensions): ImageDimensionsEntity => {\n const imageDimensionsEntity: ImageDimensionsEntity = new ImageDimensionsEntity()\n imageDimensionsEntity.width = args.width\n imageDimensionsEntity.height = args.height\n\n return imageDimensionsEntity\n}\n\nexport const issuerBrandingEntityFrom = (args: IBasicIssuerBranding): IssuerBrandingEntity => {\n const issuerBrandingEntity: IssuerBrandingEntity = new IssuerBrandingEntity()\n issuerBrandingEntity.issuerCorrelationId = args.issuerCorrelationId\n issuerBrandingEntity.localeBranding = args.localeBranding.map((localeBranding: IBasicIssuerLocaleBranding) =>\n issuerLocaleBrandingEntityFrom(localeBranding),\n )\n\n return issuerBrandingEntity\n}\n\nexport const textAttributesEntityFrom = (args: IBasicTextAttributes): TextAttributesEntity => {\n const textAttributesEntity: TextAttributesEntity = new TextAttributesEntity()\n textAttributesEntity.color = isEmptyString(args.color) ? undefined : args.color\n\n return textAttributesEntity\n}\n\nexport const credentialClaimsEntityFrom = (args: IBasicCredentialClaim): CredentialClaimsEntity => {\n const credentialClaimsEntity: CredentialClaimsEntity = new CredentialClaimsEntity()\n credentialClaimsEntity.key = args.key\n credentialClaimsEntity.name = args.name\n\n return credentialClaimsEntity\n}\n","import { type OrPromise, StatusListType } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { DataSource, In, type Repository } from 'typeorm'\nimport { BitstringStatusListEntryEntity } from '../entities/statusList/BitstringStatusListEntryEntity'\nimport { StatusListEntryEntity } from '../entities/statusList/StatusList2021EntryEntity'\nimport { BitstringStatusListEntity, OAuthStatusListEntity, StatusList2021Entity, StatusListEntity } from '../entities/statusList/StatusListEntities'\nimport {\n IAddStatusListArgs,\n IAddStatusListEntryArgs,\n IBitstringStatusListEntity,\n IBitstringStatusListEntryEntity,\n IGetStatusListArgs,\n IGetStatusListEntriesArgs,\n IGetStatusListEntryByCredentialIdArgs,\n IGetStatusListEntryByIndexArgs,\n IGetStatusListsArgs,\n IRemoveStatusListArgs,\n IStatusListEntity,\n IStatusListEntryAvailableArgs,\n IStatusListEntryEntity,\n IUpdateStatusListIndexArgs,\n} from '../types'\nimport { statusListEntityFrom, statusListFrom } from '../utils/statusList/MappingUtils'\nimport type { IStatusListStore } from './IStatusListStore'\n\nconst debug = Debug('sphereon:ssi-sdk:data-store:status-list')\n\nexport class StatusListStore implements IStatusListStore {\n private readonly _dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n this._dbConnection = dbConnection\n }\n\n /**\n * Gets the available status list indices from the provided indices. Meaning it will filter out any index that is already known.\n *\n * The idea is that the caller provides a set of random status list indices. We can relatively easy check against the DB in an optimized way.\n * If the status list is large it is probably best to also provide at least a good number of indices. So something like 10 or 20 values.\n * Callers are also expected to call this function multiple times if it does not yield results\n *\n * @param args\n */\n async availableStatusListEntries(args: IStatusListEntryAvailableArgs): Promise<number[]> {\n const statusListIndex = Array.isArray(args.statusListIndex) ? args.statusListIndex : [args.statusListIndex]\n const statusList = await this.getStatusList({ ...args, id: args.statusListId })\n const repo = await this.getStatusListEntryRepo(statusList.type)\n const results = (\n await repo.find({\n where: {\n statusListId: statusList.id,\n statusListIndex: In(statusListIndex),\n },\n })\n ).map((index) => index.statusListIndex)\n return statusListIndex.filter((index) => !results.includes(index))\n }\n\n async addStatusListEntry(args: IAddStatusListEntryArgs): Promise<IStatusListEntryEntity | IBitstringStatusListEntryEntity> {\n if (!args.statusListId) {\n throw new Error('statusListId is required')\n }\n\n const statusList = await this.getStatusList({ id: args.statusListId })\n return await (await this.getStatusListEntryRepo(statusList.type)).save(args)\n }\n\n async updateStatusListEntry(args: IAddStatusListEntryArgs): Promise<IStatusListEntryEntity | IBitstringStatusListEntryEntity> {\n const statusListId = args.statusListId\n if (!statusListId) {\n throw new Error('statusListId is required')\n }\n\n const statusList = await this.getStatusList({ id: statusListId })\n const result = await this.getStatusListEntryByIndex({ ...args, statusListId, errorOnNotFound: false })\n const updatedEntry: Partial<IStatusListEntryEntity> = {\n ...result,\n ...args,\n statusListId,\n }\n\n const updStatusListId = result?.statusListId ?? statusListId\n const updateResult = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).upsert(\n { ...(result ?? { statusListId: updStatusListId, statusListIndex: args.statusListIndex }), ...updatedEntry },\n { conflictPaths: ['statusList', 'statusListIndex'] },\n )\n debug(updateResult)\n return (await this.getStatusListEntryByIndex({\n ...args,\n statusListId: updStatusListId,\n errorOnNotFound: true,\n }))!\n }\n\n async getStatusListEntryByIndex({\n statusListId,\n statusListCorrelationId,\n statusListIndex,\n entryCorrelationId,\n errorOnNotFound,\n }: IGetStatusListEntryByIndexArgs): Promise<StatusListEntryEntity | BitstringStatusListEntryEntity | undefined> {\n if (!statusListId && !statusListCorrelationId) {\n throw Error(`Cannot get statusList entry without either a statusList id or statusListCorrelationId`)\n }\n\n if (!statusListIndex && !entryCorrelationId) {\n throw Error(`Cannot get statusList entry without either a statusListIndex or entryCorrelationId`)\n }\n\n const statusList = statusListId\n ? await this.getStatusList({ id: statusListId })\n : await this.getStatusList({ correlationId: statusListCorrelationId })\n\n const result = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).findOne({\n where: {\n ...(statusListId && { statusListId }),\n ...(!statusListId && statusListCorrelationId && { statusList: { correlationId: statusListCorrelationId } }),\n ...(statusListIndex && { statusListIndex }),\n ...(entryCorrelationId && { entryCorrelationId }),\n },\n relations: {\n statusList: true,\n },\n })\n\n if (!result && errorOnNotFound) {\n throw Error(`Could not find status list entry with provided filters`)\n }\n\n return result ?? undefined\n }\n\n async getStatusListEntryByCredentialId(\n args: IGetStatusListEntryByCredentialIdArgs,\n ): Promise<StatusListEntryEntity | BitstringStatusListEntryEntity | undefined> {\n const credentialId = args.credentialId\n if (!credentialId) {\n throw Error('Can only get a credential by credentialId when a credentialId is supplied')\n }\n const statusList = await this.getStatusList({\n id: args.statusListId,\n correlationId: args.statusListCorrelationId,\n })\n const where = {\n statusList: { id: statusList.id },\n ...(args.entryCorrelationId && { correlationId: args.entryCorrelationId }),\n credentialId,\n }\n debug(`Entries: ${JSON.stringify(await (await this.getStatusListEntryRepo(statusList.type)).find(), null, 2)}`)\n const result = await (await this.getStatusListEntryRepo(statusList.type)).findOne({ where })\n\n if (!result && args.errorOnNotFound) {\n throw Error(`Could not find status list credential id ${credentialId} for status list id ${statusList.id}`)\n }\n return result ?? undefined\n }\n\n async removeStatusListEntryByCredentialId(args: IGetStatusListEntryByCredentialIdArgs): Promise<boolean> {\n let error = false\n try {\n await this.getStatusListEntryByCredentialId(args) // only used to check it exists\n } catch (error) {\n error = true\n }\n if (!error) {\n const statusList = await this.getStatusList({\n id: args.statusListId,\n correlationId: args.statusListCorrelationId,\n })\n const result = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).delete({\n ...(args.statusListId && { statusList: args.statusListId }),\n ...(args.entryCorrelationId && { correlationId: args.entryCorrelationId }),\n credentialId: args.credentialId,\n })\n error = !result.affected || result.affected !== 1\n }\n return !error\n }\n\n async removeStatusListEntryByIndex(args: IGetStatusListEntryByIndexArgs): Promise<boolean> {\n let error = false\n try {\n await this.getStatusListEntryByIndex(args)\n } catch (error) {\n error = true\n }\n if (error) {\n console.error(`Could not delete statusList ${args.statusListId} entry by index ${args.statusListIndex}`)\n } else {\n const statusList = await this.getStatusList({ id: args.statusListId })\n const result = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).delete({\n ...(args.statusListId && { statusList: args.statusListId }),\n ...(args.entryCorrelationId && { correlationId: args.entryCorrelationId }),\n statusListIndex: args.statusListIndex,\n })\n error = !result.affected || result.affected !== 1\n }\n return !error\n }\n\n async getStatusListEntries(args: IGetStatusListEntriesArgs): Promise<Array<IStatusListEntryEntity | IBitstringStatusListEntryEntity>> {\n const statusList = await this.getStatusList({ id: args.statusListId })\n const results = await (\n await this.getStatusListEntryRepo(statusList.type)\n ).find({\n where: { ...args?.filter, statusList: args.statusListId },\n })\n return results as Array<IStatusListEntryEntity | IBitstringStatusListEntryEntity>\n }\n\n private async getStatusListEntity(args: IGetStatusListArgs): Promise<StatusListEntity> {\n if (!args.id && !args.correlationId) {\n throw Error(`At least and 'id' or 'correlationId' needs to be provided to lookup a status list`)\n }\n const where = []\n if (args.id) {\n where.push({ id: args.id })\n } else if (args.correlationId) {\n where.push({ correlationId: args.correlationId })\n }\n const result = await (await this.getStatusListRepo()).findOne({ where })\n if (!result) {\n throw Error(`No status list found for id ${args.id}`)\n }\n return result\n }\n\n async getStatusList(args: IGetStatusListArgs): Promise<IStatusListEntity | IBitstringStatusListEntity> {\n const entity = await this.getStatusListEntity(args)\n return statusListFrom(entity) as IStatusListEntity | IBitstringStatusListEntity\n }\n\n async getStatusLists(args: IGetStatusListsArgs): Promise<Array<IStatusListEntity | IBitstringStatusListEntity>> {\n const result = await (\n await this.getStatusListRepo()\n ).find({\n where: args.filter,\n })\n\n if (!result) {\n return []\n }\n\n return result.map((entity) => statusListFrom(entity) as IStatusListEntity | IBitstringStatusListEntity)\n }\n\n async addStatusList(args: IAddStatusListArgs): Promise<IStatusListEntity> {\n const { id, correlationId } = args\n\n const result = await (\n await this.getStatusListRepo()\n ).findOne({\n where: [{ id }, { correlationId }],\n })\n if (result) {\n throw Error(`Status list for id ${id}, correlationId ${correlationId} already exists`)\n }\n\n debug('Adding status list ', id)\n const entity = statusListEntityFrom(args)\n const createdResult = await (await this.getStatusListRepo(args.type)).save(entity)\n return statusListFrom(createdResult)\n }\n\n async updateStatusList(args: IUpdateStatusListIndexArgs): Promise<IStatusListEntity | IBitstringStatusListEntity> {\n const result = await this.getStatusList(args)\n debug('Updating status list', result)\n const entity = statusListEntityFrom(args)\n const updatedResult = await (await this.getStatusListRepo(args.type)).save(entity, { transaction: true })\n return statusListFrom(updatedResult)\n }\n\n async removeStatusList(args: IRemoveStatusListArgs): Promise<boolean> {\n const result = await this.getStatusListEntity(args)\n\n await (await this.getStatusListEntryRepo(result.type)).delete({ statusListId: result.id })\n const deletedEntity = await (await this.getStatusListRepo()).remove(result)\n\n return Boolean(deletedEntity)\n }\n\n private async getDS(): Promise<DataSource> {\n return this._dbConnection\n }\n\n async getStatusListRepo(type?: StatusListType): Promise<Repository<StatusListEntity>> {\n const dataSource = await this.getDS()\n switch (type) {\n case StatusListType.StatusList2021:\n return dataSource.getRepository(StatusList2021Entity)\n case StatusListType.OAuthStatusList:\n return dataSource.getRepository(OAuthStatusListEntity)\n case StatusListType.BitstringStatusList:\n return dataSource.getRepository(BitstringStatusListEntity)\n default:\n return dataSource.getRepository(StatusListEntity)\n }\n }\n\n async getStatusListEntryRepo(type?: StatusListType): Promise<Repository<StatusListEntryEntity | BitstringStatusListEntryEntity>> {\n const dataSource = await this.getDS()\n switch (type) {\n case StatusListType.BitstringStatusList:\n return dataSource.getRepository(BitstringStatusListEntryEntity)\n default:\n return dataSource.getRepository(StatusListEntryEntity)\n }\n }\n}\n","import { IBitstringStatusListEntity, IOAuthStatusListEntity, IStatusList2021Entity, IStatusListEntity } from '../../types'\nimport { StatusListType } from '@sphereon/ssi-types'\nimport {\n BitstringStatusListEntity,\n OAuthStatusListEntity,\n StatusList2021Entity,\n StatusListEntity,\n} from '../../entities/statusList/StatusListEntities'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const statusListEntityFrom = (args: IStatusListEntity): StatusListEntity => {\n switch (args.type) {\n case StatusListType.StatusList2021: {\n const entity = new StatusList2021Entity()\n const sl2021 = args as IStatusList2021Entity\n entity.indexingDirection = sl2021.indexingDirection\n entity.statusPurpose = sl2021.statusPurpose\n setBaseFields(entity, args)\n Object.defineProperty(entity, 'type', {\n value: StatusListType.StatusList2021,\n enumerable: true,\n configurable: true,\n })\n return entity\n }\n\n case StatusListType.OAuthStatusList: {\n const entity = new OAuthStatusListEntity()\n const oauthSl = args as IOAuthStatusListEntity\n entity.bitsPerStatus = oauthSl.bitsPerStatus\n entity.expiresAt = oauthSl.expiresAt\n setBaseFields(entity, args)\n Object.defineProperty(entity, 'type', {\n value: StatusListType.OAuthStatusList,\n enumerable: true,\n configurable: true,\n })\n return entity\n }\n\n case StatusListType.BitstringStatusList: {\n const entity = new BitstringStatusListEntity()\n const bitstringsl = args as IBitstringStatusListEntity\n if (!bitstringsl.bitsPerStatus) {\n throw Error('bitsPerStatus must be set for BitstringStatusList')\n }\n\n entity.statusPurpose = bitstringsl.statusPurpose\n entity.bitsPerStatus = bitstringsl.bitsPerStatus\n entity.validFrom = bitstringsl.validFrom\n entity.validUntil = bitstringsl.validUntil\n entity.ttl = bitstringsl.ttl\n setBaseFields(entity, args)\n Object.defineProperty(entity, 'type', {\n value: StatusListType.BitstringStatusList,\n enumerable: true,\n configurable: true,\n })\n return entity\n }\n\n default:\n throw new Error(`Invalid status list type ${args.type}`)\n }\n}\n\nexport const statusListFrom = (entity: StatusListEntity): IStatusListEntity | IBitstringStatusListEntity => {\n if (entity instanceof StatusList2021Entity) {\n const result: IStatusList2021Entity = {\n ...getBaseFields(entity),\n type: StatusListType.StatusList2021,\n indexingDirection: entity.indexingDirection,\n statusPurpose: entity.statusPurpose,\n }\n return replaceNullWithUndefined(result)\n }\n\n if (entity instanceof OAuthStatusListEntity) {\n const result: IOAuthStatusListEntity = {\n ...getBaseFields(entity),\n type: StatusListType.OAuthStatusList,\n bitsPerStatus: entity.bitsPerStatus,\n expiresAt: entity.expiresAt,\n }\n return replaceNullWithUndefined(result)\n }\n\n if (entity instanceof BitstringStatusListEntity) {\n const result: IBitstringStatusListEntity = {\n ...getBaseFields(entity),\n type: StatusListType.BitstringStatusList,\n statusPurpose: entity.statusPurpose,\n bitsPerStatus: entity.bitsPerStatus,\n validFrom: entity.validFrom,\n validUntil: entity.validUntil,\n ttl: entity.ttl,\n }\n return replaceNullWithUndefined(result)\n }\n throw new Error(`Invalid status list type ${typeof entity}`)\n}\n\nconst setBaseFields = (entity: StatusListEntity, args: IStatusListEntity) => {\n entity.id = args.id\n entity.correlationId = args.correlationId\n entity.length = args.length\n entity.issuer = args.issuer\n entity.driverType = args.driverType\n entity.credentialIdMode = args.credentialIdMode\n entity.proofFormat = args.proofFormat\n entity.statusListCredential = args.statusListCredential\n}\n\nconst getBaseFields = (entity: StatusListEntity): Omit<IStatusListEntity, 'type'> => ({\n id: entity.id,\n correlationId: entity.correlationId,\n length: entity.length,\n issuer: entity.issuer,\n driverType: entity.driverType,\n credentialIdMode: entity.credentialIdMode,\n proofFormat: entity.proofFormat,\n statusListCredential: entity.statusListCredential,\n})\n","import { 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} 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\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 type { ActivityLoggingEvent, AuditLoggingEvent } from '@sphereon/ssi-sdk.core'\nimport type { GetActivityEventsArgs, GetAuditEventsArgs, StoreActivityEventArgs, StoreAuditEventArgs } from '@sphereon/ssi-sdk.data-store-types'\nimport { AbstractEventLoggerStore } from '@sphereon/ssi-sdk.data-store-types'\nimport { LoggingEventType, type OrPromise } from '@sphereon/ssi-types'\nimport Debug, { Debugger } from 'debug'\nimport { DataSource } from 'typeorm'\nimport { AuditEventEntity } from '../entities/eventLogger/AuditEventEntity'\nimport { activityEventEntityFrom, activityEventFrom, auditEventEntityFrom, auditEventFrom } from '../utils/eventLogger/MappingUtils'\n\nconst debug: Debugger = Debug('sphereon:ssi-sdk:event-store')\n\nexport class EventLoggerStore extends AbstractEventLoggerStore {\n private readonly dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n getAuditEvents = async (args?: GetAuditEventsArgs): Promise<Array<AuditLoggingEvent>> => {\n const { filter = [] } = args ?? {}\n\n const auditEventsFilter = filter.map((item) => ({ ...item, type: LoggingEventType.AUDIT }))\n if (auditEventsFilter.length === 0) {\n auditEventsFilter.push({ type: LoggingEventType.AUDIT })\n }\n\n const connection = await this.dbConnection\n debug('Getting audit events', args)\n const result = await connection.getRepository(AuditEventEntity).find({\n where: auditEventsFilter,\n })\n\n return result.map((event: AuditEventEntity) => auditEventFrom(event))\n }\n\n storeAuditEvent = async (args: StoreAuditEventArgs): Promise<AuditLoggingEvent> => {\n const { event } = args\n\n const auditEventEntity = auditEventEntityFrom(event)\n const connection = await this.dbConnection\n debug('Storing audit event', auditEventEntity)\n const createdResult = await connection.getRepository(AuditEventEntity).save(auditEventEntity)\n\n return auditEventFrom(createdResult)\n }\n\n getActivityEvents = async (args?: GetActivityEventsArgs): Promise<Array<ActivityLoggingEvent>> => {\n const { filter = [] } = args ?? {}\n\n const activityEventsFilter = filter.map((item) => ({ ...item, type: LoggingEventType.ACTIVITY }))\n if (activityEventsFilter.length === 0) {\n activityEventsFilter.push({ type: LoggingEventType.ACTIVITY })\n }\n\n const connection = await this.dbConnection\n debug('Getting activity events', args)\n const result = await connection.getRepository(AuditEventEntity).find({\n where: activityEventsFilter,\n })\n\n return result.map((event: AuditEventEntity) => activityEventFrom(event))\n }\n\n storeActivityEvent = async (args: StoreActivityEventArgs): Promise<ActivityLoggingEvent> => {\n const { event } = args\n\n const activityEventEntity = activityEventEntityFrom(event)\n const connection = await this.dbConnection\n debug('Storing activity event', activityEventEntity)\n const createdResult = await connection.getRepository(AuditEventEntity).save(activityEventEntity)\n\n return activityEventFrom(createdResult)\n }\n}\n","import type { ActivityLoggingEvent, AuditLoggingEvent } from '@sphereon/ssi-sdk.core'\nimport type { NonPersistedActivityLoggingEvent, NonPersistedAuditLoggingEvent } from '@sphereon/ssi-sdk.data-store-types'\nimport { LoggingEventType } from '@sphereon/ssi-types'\nimport { AuditEventEntity } from '../../entities/eventLogger/AuditEventEntity'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const auditEventFrom = (event: AuditEventEntity): AuditLoggingEvent => {\n const result: AuditLoggingEvent = {\n id: event.id,\n type: LoggingEventType.AUDIT,\n description: event.description,\n timestamp: event.timestamp,\n level: event.level,\n correlationId: event.correlationId,\n actionType: event.actionType,\n actionSubType: event.actionSubType,\n initiatorType: event.initiatorType,\n partyAlias: event.partyAlias,\n partyCorrelationId: event.partyCorrelationId,\n partyCorrelationType: event.partyCorrelationType,\n subSystemType: event.subSystemType,\n system: event.system,\n systemAlias: event.systemAlias,\n systemCorrelationId: event.systemCorrelationId,\n systemCorrelationIdType: event.systemCorrelationIdType,\n ...(event.data && { data: JSON.parse(event.data) }),\n ...(event.diagnosticData && { diagnosticData: JSON.parse(event.diagnosticData) }),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const auditEventEntityFrom = (args: NonPersistedAuditLoggingEvent): AuditEventEntity => {\n const auditEventEntity: AuditEventEntity = new AuditEventEntity()\n auditEventEntity.type = LoggingEventType.AUDIT\n auditEventEntity.timestamp = args.timestamp\n auditEventEntity.level = args.level\n auditEventEntity.correlationId = args.correlationId\n auditEventEntity.system = args.system\n auditEventEntity.subSystemType = args.subSystemType\n auditEventEntity.actionType = args.actionType\n auditEventEntity.actionSubType = args.actionSubType\n auditEventEntity.initiatorType = args.initiatorType\n auditEventEntity.systemCorrelationIdType = args.systemCorrelationIdType\n auditEventEntity.systemCorrelationId = args.systemCorrelationId\n auditEventEntity.systemAlias = args.systemAlias\n auditEventEntity.partyCorrelationType = args.partyCorrelationType\n auditEventEntity.partyCorrelationId = args.partyCorrelationId\n auditEventEntity.partyAlias = args.partyAlias\n auditEventEntity.description = args.description\n auditEventEntity.partyCorrelationType = args.partyCorrelationType\n auditEventEntity.data = JSON.stringify(args.data)\n auditEventEntity.diagnosticData = JSON.stringify(args.diagnosticData)\n\n return auditEventEntity\n}\n\nexport const activityEventFrom = (event: AuditEventEntity): ActivityLoggingEvent => {\n const result: ActivityLoggingEvent = {\n id: event.id,\n type: LoggingEventType.ACTIVITY,\n credentialType: event.credentialType!,\n originalCredential: event.originalCredential,\n credentialHash: event.credentialHash,\n parentCredentialHash: event.parentCredentialHash,\n sharePurpose: event.sharePurpose,\n description: event.description,\n timestamp: event.timestamp,\n level: event.level,\n correlationId: event.correlationId,\n actionType: event.actionType,\n actionSubType: event.actionSubType,\n initiatorType: event.initiatorType,\n partyAlias: event.partyAlias,\n partyCorrelationId: event.partyCorrelationId,\n partyCorrelationType: event.partyCorrelationType,\n subSystemType: event.subSystemType,\n system: event.system,\n systemAlias: event.systemAlias,\n systemCorrelationId: event.systemCorrelationId,\n systemCorrelationIdType: event.systemCorrelationIdType,\n ...(event.data && { data: JSON.parse(event.data) }),\n ...(event.diagnosticData && { diagnosticData: JSON.parse(event.diagnosticData) }),\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const activityEventEntityFrom = (args: NonPersistedActivityLoggingEvent): AuditEventEntity => {\n const activityEventEntity: AuditEventEntity = new AuditEventEntity()\n activityEventEntity.type = LoggingEventType.ACTIVITY\n activityEventEntity.timestamp = args.timestamp\n activityEventEntity.level = args.level\n activityEventEntity.correlationId = args.correlationId\n activityEventEntity.system = args.system\n activityEventEntity.subSystemType = args.subSystemType\n activityEventEntity.actionType = args.actionType\n activityEventEntity.actionSubType = args.actionSubType\n activityEventEntity.initiatorType = args.initiatorType\n activityEventEntity.systemCorrelationIdType = args.systemCorrelationIdType\n activityEventEntity.systemCorrelationId = args.systemCorrelationId\n activityEventEntity.systemAlias = args.systemAlias\n activityEventEntity.partyCorrelationType = args.partyCorrelationType\n activityEventEntity.partyCorrelationId = args.partyCorrelationId\n activityEventEntity.partyAlias = args.partyAlias\n activityEventEntity.description = args.description\n activityEventEntity.partyCorrelationType = args.partyCorrelationType\n activityEventEntity.data = JSON.stringify(args.data)\n activityEventEntity.sharePurpose = args.sharePurpose\n activityEventEntity.credentialType = args.credentialType\n activityEventEntity.originalCredential = args.originalCredential\n activityEventEntity.credentialHash = args.credentialHash\n activityEventEntity.parentCredentialHash = args.parentCredentialHash\n activityEventEntity.diagnosticData = JSON.stringify(args.diagnosticData)\n\n return activityEventEntity\n}\n","import type {\n StoreFindMachineStatesArgs,\n StoreMachineStateDeleteArgs,\n StoreMachineStateDeleteExpiredArgs,\n StoreMachineStateGetArgs,\n StoreMachineStateInfo,\n StoreMachineStatePersistArgs,\n StoreMachineStatesFindActiveArgs,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { IAbstractMachineStateStore } from '@sphereon/ssi-sdk.data-store-types'\nimport { type OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { Brackets, DataSource, type FindOptionsWhere, IsNull, LessThan, Not } from 'typeorm'\n\nimport { MachineStateInfoEntity } from '../entities/machineState/MachineStateInfoEntity'\n\nconst debug = Debug('sphereon:ssi-sdk:machine-state:store')\n\n/**\n * Represents a data store for managing machine states.\n */\nexport class MachineStateStore extends IAbstractMachineStateStore {\n private readonly _dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this._dbConnection = dbConnection\n }\n\n async persistMachineState(state: StoreMachineStatePersistArgs): Promise<StoreMachineStateInfo> {\n const connection: DataSource = await this._dbConnection\n const { machineName, instanceId, tenantId } = state\n debug(`Executing persistMachineState for machine ${machineName}, instance ${instanceId}, tenantId: ${tenantId}...`)\n const entity = MachineStateStore.machineStateInfoEntityFrom(state)\n const existing = await connection.getRepository(MachineStateInfoEntity).findOne({\n where: {\n instanceId: state.instanceId,\n },\n })\n if (existing && existing.updatedCount > state.updatedCount) {\n const error = `Updating machine state with an older version is not allowed. Machine ${existing.machineName}, last count: ${\n existing.updatedCount\n }, new count: ${existing.updatedCount}, last updated: ${existing.updatedAt}, current: ${new Date()}, instance: ${existing.instanceId}`\n console.log(error)\n return Promise.reject(new Error(error))\n }\n // No need for a transaction. This is a single entity. We don't want to be surprised by an isolation level hiding the state from others\n const result = await connection.getRepository(MachineStateInfoEntity).save(entity, { transaction: false })\n debug(`Done persistMachineState machine ${machineName}, instance ${instanceId}, tenantId: ${tenantId}`)\n return MachineStateStore.machineInfoFrom(result)\n }\n\n async findActiveMachineStates(args: StoreMachineStatesFindActiveArgs): Promise<Array<StoreMachineStateInfo>> {\n const { tenantId, machineName, instanceId } = args\n const connection: DataSource = await this._dbConnection\n debug(`Executing findActiveMachineStates query with machineName: ${machineName}, tenantId: ${tenantId}`)\n const queryBuilder = connection\n .getRepository(MachineStateInfoEntity)\n .createQueryBuilder('state')\n .where('state.completedAt IS NULL')\n .andWhere(\n new Brackets((qb) => {\n qb.where('state.expiresAt IS NULL').orWhere('state.expiresAt > :now', { now: new Date() })\n }),\n )\n\n if (instanceId) {\n queryBuilder.andWhere('state.instanceId = :instanceId', { instanceId })\n }\n if (tenantId) {\n queryBuilder.andWhere('state.tenantId = :tenantId', { tenantId })\n }\n if (machineName) {\n queryBuilder.andWhere('state.machineName = :machineName', { machineName })\n }\n\n return (\n (await queryBuilder\n .orderBy('state.updatedAt', 'DESC')\n .getMany()\n .then((entities) => entities.map(MachineStateStore.machineInfoFrom))) ?? []\n )\n }\n\n async findMachineStates(args?: StoreFindMachineStatesArgs): Promise<Array<StoreMachineStateInfo>> {\n const connection: DataSource = await this._dbConnection\n debug('findMachineStates', args)\n const result: Array<MachineStateInfoEntity> = await connection.getRepository(MachineStateInfoEntity).find({\n ...(args?.filter && { where: args?.filter }),\n transaction: false,\n })\n\n return result.map((event: MachineStateInfoEntity) => MachineStateStore.machineInfoFrom(event))\n }\n\n async getMachineState(args: StoreMachineStateGetArgs): Promise<StoreMachineStateInfo> {\n const connection: DataSource = await this._dbConnection\n debug('getMachineState', args)\n return connection.getRepository(MachineStateInfoEntity).findOneOrFail({ where: { instanceId: args.instanceId } })\n }\n\n async deleteMachineState(args: StoreMachineStateDeleteArgs): Promise<boolean> {\n debug(`Executing deleteMachineState query with id: ${args.instanceId}`)\n if (!args.instanceId) {\n throw new Error('No instanceId parameter is provided.')\n }\n try {\n const connection: DataSource = await this._dbConnection\n\n const result = await connection.getRepository(MachineStateInfoEntity).delete(args.instanceId)\n return result.affected != null && result.affected > 0\n } catch (error) {\n debug(`Error deleting state: ${error}`)\n return false\n }\n }\n\n async deleteExpiredMachineStates(args: StoreMachineStateDeleteExpiredArgs): Promise<number> {\n const { machineName, tenantId, deleteDoneStates } = args\n debug(`Executing deleteExpiredMachineStates query with params: ${JSON.stringify(args)}`)\n try {\n const connection: DataSource = await this._dbConnection\n\n const deleteCriteria: FindOptionsWhere<MachineStateInfoEntity> = {\n ...(machineName && { machineName }),\n ...(tenantId && { tenantId }),\n // When deleteOnDone state is set we only look at completedAt, in other cases we compare current time with expiresAt\n ...(!deleteDoneStates && { expiresAt: LessThan(new Date()) }),\n ...(deleteDoneStates && { completedAt: Not(IsNull()) }),\n }\n const result = await connection.getRepository(MachineStateInfoEntity).delete(deleteCriteria)\n return result.affected ?? 0\n } catch (error) {\n debug(`Error deleting machine info: ${error}`)\n return Promise.reject(new Error(`Error deleting expired machine states for machine type ${machineName}`))\n }\n }\n\n protected static machineInfoFrom = (machineStateInfoEntity: MachineStateInfoEntity): StoreMachineStateInfo => {\n // We are making sure no entity function get copied\n return JSON.parse(JSON.stringify(machineStateInfoEntity))\n }\n\n static machineStateInfoEntityFrom = (machineStateInfo: StoreMachineStateInfo | StoreMachineStatePersistArgs): MachineStateInfoEntity => {\n const entity = new MachineStateInfoEntity()\n Object.assign(entity, machineStateInfo)\n return entity\n }\n}\n","import type {\n DcqlQueryItem,\n DcqlQueryItemFilter,\n DeleteDefinitionArgs,\n DeleteDefinitionsArgs,\n GetDefinitionArgs,\n GetDefinitionsArgs,\n HasDefinitionArgs,\n HasDefinitionsArgs,\n NonPersistedDcqlQueryItem,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { AbstractPDStore } from '@sphereon/ssi-sdk.data-store-types'\nimport { type OrPromise } from '@sphereon/ssi-types'\nimport Debug from 'debug'\nimport { DataSource, In, Repository } from 'typeorm'\nimport { DcqlQueryItemEntity } from '../entities/presentationDefinition/DcqlQueryItemEntity'\nimport { dcqlQueryEntityItemFrom, dcqlQueryItemFrom } from '../utils/presentationDefinition/MappingUtils'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:pd-store')\n\nexport class PDStore extends AbstractPDStore {\n private readonly dbConnection: OrPromise<DataSource>\n\n constructor(dbConnection: OrPromise<DataSource>) {\n super()\n this.dbConnection = dbConnection\n }\n\n getDefinition = async (args: GetDefinitionArgs): Promise<DcqlQueryItem> => {\n const { itemId } = args ?? {}\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n const result: DcqlQueryItemEntity | null = await pdRepository.findOne({\n where: { id: itemId },\n })\n if (!result) {\n return Promise.reject(Error(`No presentation definition item found for id: ${itemId}`))\n }\n\n return dcqlQueryItemFrom(result)\n }\n\n hasDefinition = async (args: HasDefinitionArgs): Promise<boolean> => {\n const { itemId } = args ?? {}\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n\n const resultCount: number = await pdRepository.count({\n where: { id: itemId },\n })\n\n return resultCount > 0\n }\n\n hasDefinitions = async (args: HasDefinitionsArgs): Promise<boolean> => {\n const { filter } = args\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n\n const resultCount: number = await pdRepository.count({\n ...(filter && { where: cleanFilter(filter) }),\n })\n return resultCount > 0\n }\n\n getDefinitions = async (args: GetDefinitionsArgs): Promise<Array<DcqlQueryItem>> => {\n const { filter } = args\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n const initialResult = await this.findIds(pdRepository, filter)\n const result: Array<DcqlQueryItemEntity> = await pdRepository.find({\n where: {\n id: In(initialResult.map((entity: DcqlQueryItemEntity) => entity.id)),\n },\n order: {\n version: 'DESC',\n },\n })\n\n return result.map((entity: DcqlQueryItemEntity) => dcqlQueryItemFrom(entity))\n }\n\n addDefinition = async (item: NonPersistedDcqlQueryItem): Promise<DcqlQueryItem> => {\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n\n const entity: DcqlQueryItemEntity = dcqlQueryEntityItemFrom(item)\n debug('Adding presentation definition entity', item)\n const result: DcqlQueryItemEntity = await pdRepository.save(entity, {\n transaction: true,\n })\n\n return dcqlQueryItemFrom(result)\n }\n\n updateDefinition = async (item: DcqlQueryItem): Promise<DcqlQueryItem> => {\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n\n const result: DcqlQueryItemEntity | null = await pdRepository.findOne({\n where: { id: item.id },\n })\n if (!result) {\n return Promise.reject(Error(`No presentation definition entity found for id: ${item.id}`))\n }\n\n const updatedEntity: Partial<DcqlQueryItemEntity> = {\n ...result,\n }\n updatedEntity.tenantId = item.tenantId\n updatedEntity.queryId = item.queryId!\n updatedEntity.version = item.version\n updatedEntity.name = item.name\n updatedEntity.purpose = item.purpose\n updatedEntity.query = JSON.stringify(item.query)\n\n debug('Updating presentation definition entity', updatedEntity)\n const updateResult: DcqlQueryItemEntity = await pdRepository.save(updatedEntity, {\n transaction: true,\n })\n\n return dcqlQueryItemFrom(updateResult)\n }\n\n deleteDefinition = async (args: DeleteDefinitionArgs): Promise<void> => {\n const { itemId } = args\n\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n const entity: DcqlQueryItemEntity | null = await pdRepository.findOne({\n where: { id: itemId },\n })\n\n if (!entity) {\n return Promise.reject(Error(`No presentation definition found with id: ${itemId}`))\n }\n\n debug('Deleting presentation definition entity', entity)\n await pdRepository.delete(entity.id)\n }\n\n deleteDefinitions = async (args: DeleteDefinitionsArgs): Promise<number> => {\n const { filter } = args\n const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)\n const initialResult = await this.findIds(pdRepository, filter)\n\n const result: Array<DcqlQueryItemEntity> = await pdRepository.find({\n where: {\n id: In(initialResult.map((entity: DcqlQueryItemEntity) => entity.id)),\n },\n })\n\n for (const entity of result) {\n debug('Deleting presentation definition entity', entity.id)\n await pdRepository.delete(entity.id)\n }\n return result.length\n }\n\n findIds = async (\n pdRepository: Repository<DcqlQueryItemEntity>,\n filter: Array<DcqlQueryItemFilter> | undefined,\n ): Promise<Array<DcqlQueryItemEntity>> => {\n const idFilters = filter?.map((f) => f.id).filter((id) => id !== undefined && id !== null)\n if (idFilters && idFilters.length > 0 && idFilters.length === filter?.length) {\n return await pdRepository.find({\n where: { id: In(idFilters) },\n })\n } else {\n return await pdRepository.find({\n ...(filter && { where: cleanFilter(filter) }), // TODO test how mixing filters work\n })\n }\n }\n}\n\nconst cleanFilter = (filter: Array<DcqlQueryItemFilter> | undefined): Array<DcqlQueryItemFilter> | undefined => {\n if (filter === undefined) {\n return undefined\n }\n\n return filter.map((item) => {\n const cleanedItem: DcqlQueryItemFilter = {}\n for (const key in item) {\n const value = item[key as keyof DcqlQueryItemFilter]\n if (value !== undefined) {\n ;(cleanedItem as any)[key] = value\n }\n }\n return cleanedItem\n })\n}\n","import type { IPresentationDefinition } from '@sphereon/pex'\nimport type { DcqlQueryItem, NonPersistedDcqlQueryItem, PartialDcqlQueryItem } from '@sphereon/ssi-sdk.data-store-types'\nimport * as blakepkg from 'blakejs'\nimport { DcqlQuery } from 'dcql'\nimport { DcqlQueryItemEntity } from '../../entities/presentationDefinition/DcqlQueryItemEntity'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nexport const dcqlQueryItemFrom = (entity: DcqlQueryItemEntity): DcqlQueryItem => {\n const result: DcqlQueryItem = {\n id: entity.id,\n tenantId: entity.tenantId,\n queryId: entity.queryId,\n version: entity.version,\n name: entity.name,\n purpose: entity.purpose,\n query: DcqlQuery.parse(JSON.parse(entity.query)),\n createdAt: entity.createdAt,\n lastUpdatedAt: entity.lastUpdatedAt,\n }\n\n if (result.query) {\n DcqlQuery.validate(result.query)\n }\n return replaceNullWithUndefined(result)\n}\n\nexport const dcqlQueryEntityItemFrom = (item: NonPersistedDcqlQueryItem): DcqlQueryItemEntity => {\n const entity = new DcqlQueryItemEntity()\n\n entity.tenantId = item.tenantId\n entity.queryId = item.queryId!\n entity.version = item.version\n entity.name = item.name\n entity.purpose = item.purpose\n if (item.query) {\n const dcqlQuery = DcqlQuery.parse(item.query)\n DcqlQuery.validate(dcqlQuery)\n entity.query = JSON.stringify(item.query)\n }\n return entity\n}\n\nfunction hashPayload(payload: IPresentationDefinition | DcqlQuery): string {\n return blakepkg.blake2bHex(JSON.stringify(payload))\n}\n\nexport function isPresentationDefinitionEqual(base: PartialDcqlQueryItem, compare: PartialDcqlQueryItem): boolean {\n if (\n base.queryId !== compare.queryId ||\n base.tenantId !== compare.tenantId ||\n base.version !== compare.version ||\n base.name !== compare.name ||\n base.purpose !== compare.purpose\n ) {\n return false\n }\n\n if (base.query && compare.query) {\n if (hashPayload(base.query) !== hashPayload(compare.query)) {\n return false\n }\n } else if (base.query || compare.query) {\n return false\n }\n\n return true\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateContacts1659463079428 } from '../postgres/1659463079428-CreateContacts'\nimport { CreateContacts1659463069549 } from '../sqlite/1659463069549-CreateContacts'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateContacts1659463079429 implements MigrationInterface {\n name = 'CreateContacts1659463079429'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating contacts tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1659463079428 = new CreateContacts1659463079428()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1659463069549 = new CreateContacts1659463069549()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting contacts tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1659463079428 = new CreateContacts1659463079428()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1659463069549 = new CreateContacts1659463069549()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { enablePostgresUuidExtension } from '@sphereon/ssi-sdk.core'\nimport { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1659463079428 implements MigrationInterface {\n name = 'CreateContacts1659463079428'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await enablePostgresUuidExtension(queryRunner)\n await queryRunner.query(\n `CREATE TABLE \"BaseConfigEntity\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"client_id\" character varying(255), \"client_secret\" character varying(255), \"scopes\" text, \"issuer\" character varying(255), \"redirect_url\" text, \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"identifier\" character varying(255), \"session_id\" character varying(255), \"type\" character varying NOT NULL, \"connectionId\" uuid, CONSTRAINT \"REL_BaseConfig_connectionId\" UNIQUE (\"connectionId\"), CONSTRAINT \"PK_BaseConfigEntity_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfigEntity_type\" ON \"BaseConfigEntity\" (\"type\")`)\n await queryRunner.query(`CREATE TYPE \"public\".\"CorrelationIdentifier_type_enum\" AS ENUM('did', 'url')`)\n await queryRunner.query(\n `CREATE TABLE \"CorrelationIdentifier\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" \"public\".\"CorrelationIdentifier_type_enum\" NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" uuid, CONSTRAINT \"UQ_Correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"PK_CorrelationIdentifier_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Contact\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"name\" character varying(255) NOT NULL, \"alias\" character varying(255) NOT NULL, \"uri\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"UQ_Name\" UNIQUE (\"name\"), CONSTRAINT \"UQ_Contact_Alias\" UNIQUE (\"alias\"), CONSTRAINT \"PK_Contact_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"IdentityMetadata\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"label\" character varying(255) NOT NULL, \"value\" character varying(255) NOT NULL, \"identityId\" uuid, CONSTRAINT \"PK_IdentityMetadata_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Identity\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"alias\" character varying(255) NOT NULL, \"roles\" text, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"contactId\" uuid, CONSTRAINT \"UQ_Identity_Alias\" UNIQUE (\"alias\"), CONSTRAINT \"PK_Identity_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE TYPE \"public\".\"Connection_type_enum\" AS ENUM('OIDC', 'SIOPv2', 'SIOPv2+OpenID4VP')`)\n await queryRunner.query(\n `CREATE TABLE \"Connection\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" \"public\".\"Connection_type_enum\" NOT NULL, \"identityId\" uuid, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"PK_Connection_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseConfigEntity\" ADD CONSTRAINT \"FK_BaseConfig_connectionId\" FOREIGN KEY (\"connectionId\") REFERENCES \"Connection\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"CorrelationIdentifier\" ADD CONSTRAINT \"FK_CorrelationIdentifier_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"IdentityMetadata\" ADD CONSTRAINT \"FK_IdentityMetadata_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Identity\" ADD CONSTRAINT \"FK_Identity_contactId\" FOREIGN KEY (\"contactId\") REFERENCES \"Contact\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Connection\" ADD CONSTRAINT \"FK_Connection_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP CONSTRAINT \"FK_Connection_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP CONSTRAINT \"FK_Identity_contactId\"`)\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" DROP CONSTRAINT \"FK_IdentityMetadata_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP CONSTRAINT \"FK_CorrelationIdentifier_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseConfigEntity\" DROP CONSTRAINT \"FK_BaseConfig_connectionId\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Connection_type_enum\"`)\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`DROP TABLE \"IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"Contact\"`)\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"CorrelationIdentifier_type_enum\"`)\n await queryRunner.query(`DROP INDEX \"public\".\"IDX_BaseConfigEntity_type\"`)\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1659463069549 implements MigrationInterface {\n name = 'CreateContacts1659463069549'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"BaseConfigEntity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"redirect_url\" text, \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"identifier\" varchar(255), \"session_id\" varchar(255), \"type\" varchar NOT NULL, \"connectionId\" varchar, CONSTRAINT \"REL_BaseConfig_connectionId\" UNIQUE (\"connectionId\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfigEntity_type\" ON \"BaseConfigEntity\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" varchar, CONSTRAINT \"UQ_Correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Contact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"name\" varchar(255) NOT NULL, \"alias\" varchar(255) NOT NULL, \"uri\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"UQ_Name\" UNIQUE (\"name\"), CONSTRAINT \"UQ_Alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"IdentityMetadata\" (\"id\" varchar PRIMARY KEY NOT NULL, \"label\" varchar(255) NOT NULL, \"value\" varchar(255) NOT NULL, \"identityId\" varchar)`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"contactId\" varchar, CONSTRAINT \"UQ_Alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfigEntity_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseConfigEntity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"redirect_url\" text, \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"identifier\" varchar(255), \"session_id\" varchar(255), \"type\" varchar NOT NULL, \"connectionId\" varchar, CONSTRAINT \"REL_BaseConfig_connectionId\" UNIQUE (\"connectionId\"), CONSTRAINT \"FK_BaseConfig_connectionId\" FOREIGN KEY (\"connectionId\") REFERENCES \"Connection\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseConfigEntity\"(\"id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"redirect_url\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"identifier\", \"session_id\", \"type\", \"connectionId\") SELECT \"id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"redirect_url\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"identifier\", \"session_id\", \"type\", \"connectionId\" FROM \"BaseConfigEntity\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseConfigEntity\" RENAME TO \"BaseConfigEntity\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfigEntity_type\" ON \"BaseConfigEntity\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" varchar, CONSTRAINT \"UQ_Correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"FK_CorrelationIdentifier_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identityId\") SELECT \"id\", \"type\", \"correlation_id\", \"identityId\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_CorrelationIdentifier\" RENAME TO \"CorrelationIdentifier\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_IdentityMetadata\" (\"id\" varchar PRIMARY KEY NOT NULL, \"label\" varchar(255) NOT NULL, \"value\" varchar(255) NOT NULL, \"identityId\" varchar, CONSTRAINT \"FK_IdentityMetadata_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_IdentityMetadata\"(\"id\", \"label\", \"value\", \"identityId\") SELECT \"id\", \"label\", \"value\", \"identityId\" FROM \"IdentityMetadata\"`,\n )\n await queryRunner.query(`DROP TABLE \"IdentityMetadata\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_IdentityMetadata\" RENAME TO \"IdentityMetadata\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"contactId\" varchar, CONSTRAINT \"UQ_Alias\" UNIQUE (\"alias\"), CONSTRAINT \"FK_Identity_contactId\" FOREIGN KEY (\"contactId\") REFERENCES \"Contact\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\") SELECT \"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"FK_Connection_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(`INSERT INTO \"temporary_Connection\"(\"id\", \"type\", \"identityId\") SELECT \"id\", \"type\", \"identityId\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Connection\" RENAME TO \"Connection\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"Connection\" RENAME TO \"temporary_Connection\"`)\n await queryRunner.query(\n `CREATE TABLE \"Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(`INSERT INTO \"Connection\"(\"id\", \"type\", \"identityId\") SELECT \"id\", \"type\", \"identityId\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"temporary_Connection\"`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" RENAME TO \"temporary_Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"contactId\" varchar, CONSTRAINT \"UQ_Alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"Identity\"(\"id\", \"alias\", \"roles\",\"created_at\", \"last_updated_at\", \"contactId\") SELECT \"id\", \"alias\", \"roles\",\"created_at\", \"last_updated_at\", \"contactId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_Identity\"`)\n\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(\n `CREATE TABLE \"IdentityMetadata\" (\"id\" varchar PRIMARY KEY NOT NULL, \"label\" varchar(255) NOT NULL, \"value\" varchar(255) NOT NULL, \"identityId\" varchar)`,\n )\n await queryRunner.query(\n `INSERT INTO \"IdentityMetadata\"(\"id\", \"label\", \"value\", \"identityId\") SELECT \"id\", \"label\", \"value\", \"identityId\" FROM \"IdentityMetadata\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" RENAME TO \"temporary_CorrelationIdentifier\"`)\n await queryRunner.query(\n `CREATE TABLE \"CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" varchar, CONSTRAINT \"UQ_Correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identityId\") SELECT \"id\", \"type\", \"correlation_id\", \"identityId\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_CorrelationIdentifier\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`DROP TABLE \"IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"Contact\"`)\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfigEntity_type\"`)\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreatePresentationDefinitions1716475165345 } from '../postgres/1716475165345-CreatePresentationDefinitions'\nimport { CreatePresentationDefinitions1716475165344 } from '../sqlite/1716475165344-CreatePresentationDefinitions'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreatePresentationDefinitions1716533767523 implements MigrationInterface {\n name = 'CreatePresentationDefinitionItems1716533767523'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreatePresentationDefinitions1716475165345 = new CreatePresentationDefinitions1716475165345()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreatePresentationDefinitions1716475165344 = new CreatePresentationDefinitions1716475165344()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreatePresentationDefinitions1716475165345 = new CreatePresentationDefinitions1716475165345()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreatePresentationDefinitions1716475165344 = new CreatePresentationDefinitions1716475165344()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreatePresentationDefinitions1716475165345 implements MigrationInterface {\n name = 'CreatePresentationDefinitions1716475165345'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\nCREATE TABLE \"PresentationDefinitionItem\" (\n \"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \n \"tenant_id\" TEXT, \n \"definition_id\" TEXT NOT NULL,\n \"name\" TEXT,\n \"version\" TEXT NOT NULL, \n \"purpose\" TEXT, \n \"definition_payload\" TEXT NOT NULL, \n \"query\" TEXT, \n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \n \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \n CONSTRAINT \"PK_PresentationDefinitionItem_id\" PRIMARY KEY (\"id\"))\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"PresentationDefinitionItem\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreatePresentationDefinitions1716475165344 implements MigrationInterface {\n name = 'CreatePresentationDefinitions1716475165344'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"PresentationDefinitionItem\" (\n \"id\" varchar PRIMARY KEY NOT NULL, \n \"tenant_id\" varchar,\n \"definition_id\" varchar NOT NULL,\n \"name\" varchar,\n \"version\" varchar NOT NULL,\n \"purpose\" varchar,\n \"definition_payload\" varchar NOT NULL,\n \"query\" varchar,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"PresentationDefinitionItem\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateIssuanceBranding1685628974232 } from '../postgres/1685628974232-CreateIssuanceBranding'\nimport { FixCredentialClaimsReferencesUuidPG1741895822987 } from '../postgres/1741895822987-FixCredentialClaimsReferencesUuid'\nimport { CreateIssuanceBranding1685628973231 } from '../sqlite/1685628973231-CreateIssuanceBranding'\nimport { FixCredentialClaimsReferencesUuidSqlite1741895822987 } from '../sqlite/1741895822987-FixCredentialClaimsReferencesUuid'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class FixCredentialClaimsReferencesUuid1741895822987 implements MigrationInterface {\n name = 'FixCredentialClaimsReferenceUuid1741895822987'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating issuance branding uuid problem')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: FixCredentialClaimsReferencesUuidPG1741895822987 = new FixCredentialClaimsReferencesUuidPG1741895822987()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: FixCredentialClaimsReferencesUuidSqlite1741895822987 = new FixCredentialClaimsReferencesUuidSqlite1741895822987()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting issuance branding uuid migration')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateIssuanceBranding1685628974232 = new CreateIssuanceBranding1685628974232()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateIssuanceBranding1685628973231 = new CreateIssuanceBranding1685628973231()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { enablePostgresUuidExtension } from '@sphereon/ssi-sdk.core'\nimport { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateIssuanceBranding1685628974232 implements MigrationInterface {\n name = 'CreateIssuanceBranding1685628974232'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await enablePostgresUuidExtension(queryRunner)\n await queryRunner.query(\n `CREATE TABLE \"ImageDimensions\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"width\" integer NOT NULL, \"height\" integer NOT NULL, CONSTRAINT \"PK_ImageDimensions_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"ImageAttributes\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"uri\" character varying, \"dataUri\" character varying, \"mediaType\" character varying(255), \"alt\" character varying(255), \"dimensionsId\" uuid, CONSTRAINT \"UQ_dimensionsId\" UNIQUE (\"dimensionsId\"), CONSTRAINT \"PK_ImageAttributes_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BackgroundAttributes\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"color\" character varying(255), \"imageId\" uuid, CONSTRAINT \"UQ_imageId\" UNIQUE (\"imageId\"), CONSTRAINT \"PK_BackgroundAttributes_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"TextAttributes\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"color\" character varying(255), CONSTRAINT \"PK_TextAttributes_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BaseLocaleBranding\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"alias\" character varying(255), \"locale\" character varying(255) NOT NULL, \"description\" character varying(255), \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"credentialBrandingId\" uuid, \"issuerBrandingId\" uuid, \"type\" character varying NOT NULL, \"logoId\" uuid, \"backgroundId\" uuid, \"textId\" uuid, \"client_uri\" character varying, \"tos_uri\" character varying, \"policy_uri\" character varying, \"contacts\" character varying, CONSTRAINT \"UQ_logoId\" UNIQUE (\"logoId\"), CONSTRAINT \"UQ_backgroundId\" UNIQUE (\"backgroundId\"), CONSTRAINT \"UQ_textId\" UNIQUE (\"textId\"), CONSTRAINT \"PK_BaseLocaleBranding_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\" ON \"BaseLocaleBranding\" (\"credentialBrandingId\", \"locale\")`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\" ON \"BaseLocaleBranding\" (\"issuerBrandingId\", \"locale\")`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseLocaleBranding_type\" ON \"BaseLocaleBranding\" (\"type\")`)\n\n await queryRunner.query(\n `CREATE TABLE \"CredentialClaims\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"key\" character varying(255) NOT NULL, \"name\" character varying(255) NOT NULL, \"credentialLocaleBrandingId\" character varying, CONSTRAINT \"PK_CredentialClaims_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\" ON \"CredentialClaims\" (\"credentialLocaleBrandingId\", \"key\")`,\n )\n\n await queryRunner.query(\n `CREATE TABLE \"CredentialBranding\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"vcHash\" character varying(255) NOT NULL, \"issuerCorrelationId\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"UQ_vcHash\" UNIQUE (\"vcHash\"), CONSTRAINT \"PK_CredentialBranding_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_CredentialBrandingEntity_issuerCorrelationId\" ON \"CredentialBranding\" (\"issuerCorrelationId\")`)\n await queryRunner.query(`CREATE INDEX \"IDX_CredentialBrandingEntity_vcHash\" ON \"CredentialBranding\" (\"vcHash\")`)\n await queryRunner.query(\n `CREATE TABLE \"IssuerBranding\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"issuerCorrelationId\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"UQ_issuerCorrelationId\" UNIQUE (\"issuerCorrelationId\"), CONSTRAINT \"PK_IssuerBranding_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_IssuerBrandingEntity_issuerCorrelationId\" ON \"IssuerBranding\" (\"issuerCorrelationId\")`)\n await queryRunner.query(\n `ALTER TABLE \"ImageAttributes\" ADD CONSTRAINT \"FK_ImageAttributes_dimensionsId\" FOREIGN KEY (\"dimensionsId\") REFERENCES \"ImageDimensions\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BackgroundAttributes\" ADD CONSTRAINT \"FK_BackgroundAttributes_imageId\" FOREIGN KEY (\"imageId\") REFERENCES \"ImageAttributes\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_logoId\" FOREIGN KEY (\"logoId\") REFERENCES \"ImageAttributes\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_backgroundId\" FOREIGN KEY (\"backgroundId\") REFERENCES \"BackgroundAttributes\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_textId\" FOREIGN KEY (\"textId\") REFERENCES \"TextAttributes\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_credentialBrandingId\" FOREIGN KEY (\"credentialBrandingId\") REFERENCES \"CredentialBranding\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseLocaleBranding\" ADD CONSTRAINT \"FK_BaseLocaleBranding_issuerBrandingId\" FOREIGN KEY (\"issuerBrandingId\") REFERENCES \"IssuerBranding\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_issuerBrandingId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_credentialBrandingId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_textId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_backgroundId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BaseLocaleBranding_logoId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_BackgroundAttributes_imageId\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP CONSTRAINT \"FK_ImageAttributes_dimensionsId\"`)\n await queryRunner.query(`ALTER TABLE \"IssuerBranding\" DROP INDEX \"IDX_IssuerBrandingEntity_issuerCorrelationId\"`)\n await queryRunner.query(`DROP TABLE \"IssuerBranding\"`)\n await queryRunner.query(`ALTER TABLE \"CredentialBranding\" DROP INDEX \"IDX_CredentialBrandingEntity_vcHash\"`)\n await queryRunner.query(`ALTER TABLE \"CredentialBranding\" DROP INDEX \"IDX_CredentialBrandingEntity_issuerCorrelationId\"`)\n await queryRunner.query(`DROP TABLE \"CredentialBranding\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP INDEX \"IDX_BaseLocaleBranding_type\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" DROP INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\"`)\n await queryRunner.query(`ALTER TABLE \"CredentialClaims\" DROP INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\"`)\n await queryRunner.query(`DROP TABLE \"CredentialClaims\"`)\n await queryRunner.query(`DROP TABLE \"BaseLocaleBranding\"`)\n await queryRunner.query(`DROP TABLE \"TextAttributes\"`)\n await queryRunner.query(`DROP TABLE \"BackgroundAttributes\"`)\n await queryRunner.query(`DROP TABLE \"ImageAttributes\"`)\n await queryRunner.query(`DROP TABLE \"ImageDimensions\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class FixCredentialClaimsReferencesUuidPG1741895822987 implements MigrationInterface {\n name = 'FixCredentialClaimsReferencesUuid1741895822987'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Migrate varchar to uuid\n await queryRunner.query(`\n ALTER TABLE \"CredentialClaims\"\n ALTER COLUMN \"credentialLocaleBrandingId\" TYPE uuid USING \"credentialLocaleBrandingId\"::uuid;\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Migrate uuid back to varchar\n await queryRunner.query(`\n ALTER TABLE \"CredentialClaims\"\n ALTER COLUMN \"credentialLocaleBrandingId\" TYPE character varying USING \"credentialLocaleBrandingId\"::text;\n `)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateIssuanceBranding1685628973231 implements MigrationInterface {\n name = 'CreateIssuanceBranding1685628973231'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`CREATE TABLE \"ImageDimensions\" (\"id\" varchar PRIMARY KEY NOT NULL, \"width\" integer NOT NULL, \"height\" integer NOT NULL)`)\n await queryRunner.query(\n `CREATE TABLE \"ImageAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar, \"dataUri\" varchar, \"mediaType\" varchar(255), \"alt\" varchar(255), \"dimensionsId\" varchar, CONSTRAINT \"UQ_dimensionsId\" UNIQUE (\"dimensionsId\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BackgroundAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"color\" varchar(255), \"imageId\" varchar, CONSTRAINT \"UQ_imageId\" UNIQUE (\"imageId\"))`,\n )\n await queryRunner.query(`CREATE TABLE \"TextAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"color\" varchar(255))`)\n await queryRunner.query(\n `CREATE TABLE \"BaseLocaleBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255), \"locale\" varchar(255) NOT NULL, \"description\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"credentialBrandingId\" varchar, \"issuerBrandingId\" varchar, \"type\" varchar NOT NULL, \"logoId\" varchar, \"backgroundId\" varchar, \"textId\" varchar, \"client_uri\" varchar, \"tos_uri\" varchar, \"policy_uri\" varchar, \"contacts\" varchar, CONSTRAINT \"UQ_logoId\" UNIQUE (\"logoId\"), CONSTRAINT \"UQ_backgroundId\" UNIQUE (\"backgroundId\"), CONSTRAINT \"UQ_textId\" UNIQUE (\"textId\"))`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\" ON \"BaseLocaleBranding\" (\"credentialBrandingId\", \"locale\")`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\" ON \"BaseLocaleBranding\" (\"issuerBrandingId\", \"locale\")`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseLocaleBranding_type\" ON \"BaseLocaleBranding\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"CredentialClaims\" (\"id\" varchar PRIMARY KEY NOT NULL, \"key\" varchar(255) NOT NULL, \"name\" varchar(255) NOT NULL, \"credentialLocaleBrandingId\" varchar)`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\" ON \"CredentialClaims\" (\"credentialLocaleBrandingId\", \"key\")`,\n )\n await queryRunner.query(\n `CREATE TABLE \"CredentialBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"vcHash\" varchar(255) NOT NULL, \"issuerCorrelationId\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"UQ_vcHash\" UNIQUE (\"vcHash\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_CredentialBrandingEntity_issuerCorrelationId\" ON \"CredentialBranding\" (\"issuerCorrelationId\")`)\n await queryRunner.query(`CREATE INDEX \"IDX_CredentialBrandingEntity_vcHash\" ON \"CredentialBranding\" (\"vcHash\")`)\n await queryRunner.query(\n `CREATE TABLE \"IssuerBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"issuerCorrelationId\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"UQ_issuerCorrelationId\" UNIQUE (\"issuerCorrelationId\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_IssuerBrandingEntity_issuerCorrelationId\" ON \"IssuerBranding\" (\"issuerCorrelationId\")`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_ImageAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar, \"dataUri\" varchar, \"mediaType\" varchar(255), \"alt\" varchar(255), \"dimensionsId\" varchar, CONSTRAINT \"UQ_dimensionsId\" UNIQUE (\"dimensionsId\"), CONSTRAINT \"FK_ImageAttributes_dimensionsId\" FOREIGN KEY (\"dimensionsId\") REFERENCES \"ImageDimensions\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_ImageAttributes\"(\"id\", \"uri\", \"dataUri\", \"mediaType\", \"alt\", \"dimensionsId\") SELECT \"id\", \"uri\", \"dataUri\", \"mediaType\", \"alt\", \"dimensionsId\" FROM \"ImageAttributes\"`,\n )\n await queryRunner.query(`DROP TABLE \"ImageAttributes\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_ImageAttributes\" RENAME TO \"ImageAttributes\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BackgroundAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"color\" varchar(255), \"imageId\" varchar, CONSTRAINT \"UQ_imageId\" UNIQUE (\"imageId\"), CONSTRAINT \"FK_BackgroundAttributes_imageId\" FOREIGN KEY (\"imageId\") REFERENCES \"ImageAttributes\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BackgroundAttributes\"(\"id\", \"color\", \"imageId\") SELECT \"id\", \"color\", \"imageId\" FROM \"BackgroundAttributes\"`,\n )\n await queryRunner.query(`DROP TABLE \"BackgroundAttributes\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BackgroundAttributes\" RENAME TO \"BackgroundAttributes\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\"`)\n await queryRunner.query(`DROP INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseLocaleBranding_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseLocaleBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255), \"locale\" varchar(255) NOT NULL, \"description\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"credentialBrandingId\" varchar, \"issuerBrandingId\" varchar, \"type\" varchar NOT NULL, \"logoId\" varchar, \"backgroundId\" varchar, \"textId\" varchar, \"client_uri\" varchar, \"tos_uri\" varchar, \"policy_uri\" varchar, \"contacts\" varchar, CONSTRAINT \"UQ_logoId\" UNIQUE (\"logoId\"), CONSTRAINT \"UQ_backgroundId\" UNIQUE (\"backgroundId\"), CONSTRAINT \"UQ_textId\" UNIQUE (\"textId\"), CONSTRAINT \"FK_BaseLocaleBranding_logoId\" FOREIGN KEY (\"logoId\") REFERENCES \"ImageAttributes\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_BaseLocaleBranding_backgroundId\" FOREIGN KEY (\"backgroundId\") REFERENCES \"BackgroundAttributes\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_BaseLocaleBranding_textId\" FOREIGN KEY (\"textId\") REFERENCES \"TextAttributes\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_BaseLocaleBranding_credentialBrandingId\" FOREIGN KEY (\"credentialBrandingId\") REFERENCES \"CredentialBranding\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_BaseLocaleBranding_issuerBrandingId\" FOREIGN KEY (\"issuerBrandingId\") REFERENCES \"IssuerBranding\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseLocaleBranding\"(\"id\", \"alias\", \"locale\", \"description\", \"created_at\", \"last_updated_at\", \"credentialBrandingId\", \"issuerBrandingId\", \"type\", \"logoId\", \"backgroundId\", \"textId\") SELECT \"id\", \"alias\", \"locale\", \"description\", \"created_at\", \"last_updated_at\", \"credentialBrandingId\", \"issuerBrandingId\", \"type\", \"logoId\", \"backgroundId\", \"textId\" FROM \"BaseLocaleBranding\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseLocaleBranding\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseLocaleBranding\" RENAME TO \"BaseLocaleBranding\"`)\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\" ON \"BaseLocaleBranding\" (\"credentialBrandingId\", \"locale\")`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\" ON \"BaseLocaleBranding\" (\"issuerBrandingId\", \"locale\")`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseLocaleBranding_type\" ON \"BaseLocaleBranding\" (\"type\")`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP INDEX \"IDX_BaseLocaleBranding_type\"`)\n await queryRunner.query(`DROP INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\"`)\n await queryRunner.query(`ALTER TABLE \"BaseLocaleBranding\" RENAME TO \"temporary_BaseLocaleBranding\"`)\n await queryRunner.query(\n `CREATE TABLE \"BaseLocaleBranding\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255), \"locale\" varchar(255) NOT NULL, \"description\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"credentialBrandingId\" varchar, \"issuerBrandingId\" varchar, \"type\" varchar NOT NULL, \"logoId\" varchar, \"backgroundId\" varchar, \"textId\" varchar, \"client_uri\" varchar, \"tos_uri\" varchar, \"policy_uri\" varchar, \"contacts\" varchar, CONSTRAINT \"UQ_logoId\" UNIQUE (\"logoId\"), CONSTRAINT \"UQ_backgroundId\" UNIQUE (\"backgroundId\"), CONSTRAINT \"UQ_textId\" UNIQUE (\"textId\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"BaseLocaleBranding\"(\"id\", \"alias\", \"locale\", \"description\", \"created_at\", \"last_updated_at\", \"credentialBrandingId\", \"issuerBrandingId\", \"type\", \"logoId\", \"backgroundId\", \"textId\") SELECT \"id\", \"alias\", \"locale\", \"description\", \"created_at\", \"last_updated_at\", \"credentialBrandingId\", \"issuerBrandingId\", \"type\", \"logoId\", \"backgroundId\", \"textId\" FROM \"BaseLocaleBranding\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_BaseLocaleBranding\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseLocaleBranding_type\" ON \"BaseLocaleBranding\" (\"type\")`)\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\" ON \"BaseLocaleBranding\" (\"issuerBrandingId\", \"locale\")`,\n )\n await queryRunner.query(\n `CREATE UNIQUE INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\" ON \"BaseLocaleBranding\" (\"credentialBrandingId\", \"locale\")`,\n )\n await queryRunner.query(`ALTER TABLE \"BackgroundAttributes\" RENAME TO \"temporary_BackgroundAttributes\"`)\n await queryRunner.query(\n `CREATE TABLE \"BackgroundAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"color\" varchar(255), \"imageId\" varchar, CONSTRAINT \"UQ_imageId\" UNIQUE (\"imageId\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"BackgroundAttributes\"(\"id\", \"color\", \"imageId\") SELECT \"id\", \"color\", \"imageId\" FROM \"BackgroundAttributes\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_BackgroundAttributes\"`)\n await queryRunner.query(`ALTER TABLE \"ImageAttributes\" RENAME TO \"temporary_ImageAttributes\"`)\n await queryRunner.query(\n `CREATE TABLE \"ImageAttributes\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar, \"dataUri\" varchar, \"mediaType\" varchar(255), \"alt\" varchar(255), \"dimensionsId\" varchar, CONSTRAINT \"UQ_dimensionsId\" UNIQUE (\"dimensionsId\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"ImageAttributes\"(\"id\", \"uri\", \"dataUri\", \"mediaType\", \"alt\", \"dimensionsId\") SELECT \"id\", \"uri\", \"dataUri\", \"mediaType\", \"alt\", \"dimensionsId\" FROM \"ImageAttributes\"`,\n )\n await queryRunner.query(`DROP TABLE \"temporary_ImageAttributes\"`)\n await queryRunner.query(`DROP INDEX \"IDX_IssuerBrandingEntity_issuerCorrelationId\"`)\n await queryRunner.query(`DROP TABLE \"IssuerBranding\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialBrandingEntity_vcHash\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialBrandingEntity_issuerCorrelationId\"`)\n await queryRunner.query(`DROP TABLE \"CredentialBranding\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseLocaleBranding_type\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\"`)\n await queryRunner.query(`DROP TABLE \"CredentialClaims\"`)\n await queryRunner.query(`DROP INDEX \"IDX_IssuerLocaleBrandingEntity_issuerBranding_locale\"`)\n await queryRunner.query(`DROP INDEX \"IDX_CredentialLocaleBrandingEntity_credentialBranding_locale\"`)\n await queryRunner.query(`DROP TABLE \"BaseLocaleBranding\"`)\n await queryRunner.query(`DROP TABLE \"TextAttributes\"`)\n await queryRunner.query(`DROP TABLE \"BackgroundAttributes\"`)\n await queryRunner.query(`DROP TABLE \"ImageAttributes\"`)\n await queryRunner.query(`DROP TABLE \"ImageDimensions\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class FixCredentialClaimsReferencesUuidSqlite1741895822987 implements MigrationInterface {\n name = 'FixCredentialClaimsReferencesUuid1741895822987'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Create a new table with the updated column type (uuid)\n await queryRunner.query(`\n CREATE TABLE \"CredentialClaims_new\"\n (\n \"id\" uuid NOT NULL DEFAULT (lower(hex(randomblob(16)))),\n \"key\" character varying(255) NOT NULL,\n \"name\" character varying(255) NOT NULL,\n \"credentialLocaleBrandingId\" uuid,\n CONSTRAINT \"PK_CredentialClaims_id\" PRIMARY KEY (\"id\")\n )\n `)\n\n // Copy data from the old table\n await queryRunner.query(`\n INSERT INTO \"CredentialClaims_new\" (\"id\", \"key\", \"name\", \"credentialLocaleBrandingId\")\n SELECT \"id\", \"key\", \"name\", \"credentialLocaleBrandingId\"\n FROM \"CredentialClaims\"\n `)\n\n // Drop the old table\n await queryRunner.query(`DROP TABLE \"CredentialClaims\"`)\n\n // Rename the new table to the original name\n await queryRunner.query(`ALTER TABLE \"CredentialClaims_new\" RENAME TO \"CredentialClaims\"`)\n\n // Recreate the unique index\n await queryRunner.query(`\n CREATE UNIQUE INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\"\n ON \"CredentialClaims\" (\"credentialLocaleBrandingId\", \"key\")\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Migrate uuid back to varchar\n\n // Create a new table reverting the column back to character varying\n await queryRunner.query(`\n CREATE TABLE \"CredentialClaims_old\"\n (\n \"id\" uuid NOT NULL DEFAULT (lower(hex(randomblob(16)))),\n \"key\" character varying(255) NOT NULL,\n \"name\" character varying(255) NOT NULL,\n \"credentialLocaleBrandingId\" character varying,\n CONSTRAINT \"PK_CredentialClaims_id\" PRIMARY KEY (\"id\")\n )\n `)\n\n // Copy data from the current table\n await queryRunner.query(`\n INSERT INTO \"CredentialClaims_old\" (\"id\", \"key\", \"name\", \"credentialLocaleBrandingId\")\n SELECT \"id\", \"key\", \"name\", \"credentialLocaleBrandingId\"\n FROM \"CredentialClaims\"\n `)\n\n // Drop the current table\n await queryRunner.query(`DROP TABLE \"CredentialClaims\"`)\n\n // Rename the new table back to the original name\n await queryRunner.query(`ALTER TABLE \"CredentialClaims_old\" RENAME TO \"CredentialClaims\"`)\n\n // Recreate the unique index\n await queryRunner.query(`\n CREATE UNIQUE INDEX \"IDX_CredentialClaimsEntity_credentialLocaleBranding_locale\"\n ON \"CredentialClaims\" (\"credentialLocaleBrandingId\", \"key\")\n `)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\n\nimport {\n AddBitstringStatusListEnumPG1741895823000,\n CreateBitstringStatusListPG1741895823000,\n} from '../postgres/1741895823000-CreateBitstringStatusList'\nimport { CreateBitstringStatusListSqlite1741895823001 } from '../sqlite/1741895823001-CreateBitstringStatusList'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class AddBitstringStatusListEnum1741895823000 implements MigrationInterface {\n name = 'AddBitstringStatusListEnum1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating bitstring status list tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n const mig = new AddBitstringStatusListEnumPG1741895823000()\n await mig.up(queryRunner)\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n return\n }\n default:\n return Promise.reject(`Migrations only supported for sqlite and postgres. Was ${dbType}`)\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async down(queryRunner: QueryRunner): Promise<void> {}\n}\n\nexport class CreateBitstringStatusList1741895823000 implements MigrationInterface {\n name = 'CreateBitstringStatusList1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating bitstring status list tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n const mig = new CreateBitstringStatusListPG1741895823000()\n await mig.up(queryRunner)\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n const mig = new CreateBitstringStatusListSqlite1741895823001()\n await mig.up(queryRunner)\n return\n }\n default:\n return Promise.reject(`Migrations only supported for sqlite and postgres. Was ${dbType}`)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: dropping bitstring status list tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n const mig = new CreateBitstringStatusListPG1741895823000()\n await mig.down(queryRunner)\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n const mig = new CreateBitstringStatusListSqlite1741895823001()\n await mig.down(queryRunner)\n return\n }\n default:\n return Promise.reject(`Migrations only supported for sqlite and postgres. Was ${dbType}`)\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class AddBitstringStatusListEnumPG1741895823000 implements MigrationInterface {\n name = 'AddBitstringStatusListEnum1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.startTransaction()\n await queryRunner.query(`ALTER TYPE \"StatusList_type_enum\" ADD VALUE 'BitstringStatusList'`)\n await queryRunner.commitTransaction()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Note: Cannot remove enum value in Postgres without recreating the type\n }\n}\n\nexport class CreateBitstringStatusListPG1741895823000 implements MigrationInterface {\n name = 'CreateBitstringStatusList1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Add BitstringStatusList columns to StatusList table\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD COLUMN \"ttl\" integer`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD COLUMN \"validFrom\" TIMESTAMP`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD COLUMN \"validUntil\" TIMESTAMP`)\n\n // Update type enum constraint to include BitstringStatusList\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP CONSTRAINT IF EXISTS \"CHK_StatusList_type\"`)\n await queryRunner.query(\n `ALTER TABLE \"StatusList\" ADD CONSTRAINT \"CHK_StatusList_type\" CHECK (\"type\" IN ('StatusList2021', 'OAuthStatusList', 'BitstringStatusList'))`,\n )\n\n // Add inheritance discriminator column to StatusListEntry table\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"type\" character varying NOT NULL DEFAULT 'StatusListEntryEntity'`)\n\n // Add BitstringStatusListEntry specific columns to StatusListEntry table\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"statusPurpose\" character varying`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"bitsPerStatus\" integer DEFAULT 1`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"statusMessage\" text`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" ADD COLUMN \"statusReference\" text`)\n\n // Add constraint for entry type\n await queryRunner.query(\n `ALTER TABLE \"StatusListEntry\" ADD CONSTRAINT \"CHK_StatusListEntry_type\" CHECK (\"type\" IN ('StatusListEntryEntity', 'bitstring'))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Remove entry type constraint and columns\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP CONSTRAINT \"CHK_StatusListEntry_type\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"statusReference\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"statusMessage\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"bitsPerStatus\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"statusPurpose\"`)\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\" DROP COLUMN \"type\"`)\n\n // Revert StatusList type constraint\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP CONSTRAINT \"CHK_StatusList_type\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD CONSTRAINT \"CHK_StatusList_type\" CHECK (\"type\" IN ('StatusList2021', 'OAuthStatusList'))`)\n\n // Remove BitstringStatusList columns from StatusList table\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"validUntil\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"validFrom\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"ttl\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"bitsPerStatus\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateBitstringStatusListSqlite1741895823001 implements MigrationInterface {\n name = 'CreateBitstringStatusList1741895823000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Update StatusList table to include BitstringStatusList type and columns\n await queryRunner.query(`\n CREATE TABLE \"temporary_StatusList\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK( \"type\" IN ('StatusList2021', 'OAuthStatusList', 'BitstringStatusList') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK( \"driverType\" IN ('agent_typeorm','agent_kv_store','github','agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK( \"credentialIdMode\" IN ('ISSUANCE','PERSISTENCE','NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK( \"proofFormat\" IN ('lds','jwt', 'vc+jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK( \"indexingDirection\" IN ('rightToLeft') ),\n \"statusPurpose\" varchar,\n \"statusListCredential\" text,\n \"expiresAt\" datetime,\n \"bitsPerStatus\" integer DEFAULT (1),\n \"ttl\" integer,\n \"validFrom\" datetime,\n \"validUntil\" datetime,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )\n `)\n\n await queryRunner.query(`\n INSERT INTO \"temporary_StatusList\"(\n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\", \"bitsPerStatus\", \"expiresAt\"\n )\n SELECT \n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\", \"bitsPerStatus\", \"expiresAt\"\n FROM \"StatusList\"\n `)\n\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusList\" RENAME TO \"StatusList\"`)\n\n // Update StatusListEntry table with inheritance and bitstring columns\n await queryRunner.query(`\n CREATE TABLE \"temporary_StatusListEntry\" (\n \"statusListId\" varchar NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" text,\n \"credentialHash\" varchar(128),\n \"correlationId\" varchar(255),\n \"value\" varchar(50),\n \"type\" varchar CHECK( \"type\" IN ('StatusListEntryEntity', 'bitstring') ) NOT NULL DEFAULT ('StatusListEntryEntity'),\n \"statusPurpose\" varchar,\n \"bitsPerStatus\" integer DEFAULT (1),\n \"statusMessage\" text,\n \"statusReference\" text,\n PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )\n `)\n\n await queryRunner.query(`\n INSERT INTO \"temporary_StatusListEntry\"(\n \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\", \n \"correlationId\", \"value\", \"type\"\n )\n SELECT \n \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\",\n \"correlationId\", \"value\", 'StatusListEntryEntity'\n FROM \"StatusListEntry\"\n `)\n\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusListEntry\" RENAME TO \"StatusListEntry\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Revert StatusListEntry table changes\n await queryRunner.query(`\n CREATE TABLE \"temporary_StatusListEntry\" (\n \"statusListId\" varchar NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" text,\n \"credentialHash\" varchar(128),\n \"correlationId\" varchar(255),\n \"value\" varchar(50),\n PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )\n `)\n\n await queryRunner.query(`\n INSERT INTO \"temporary_StatusListEntry\"(\n \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\",\n \"correlationId\", \"value\"\n )\n SELECT \n \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\",\n \"correlationId\", \"value\"\n FROM \"StatusListEntry\"\n WHERE \"type\" = 'StatusListEntryEntity'\n `)\n\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusListEntry\" RENAME TO \"StatusListEntry\"`)\n\n // Revert StatusList table changes\n await queryRunner.query(`\n CREATE TABLE \"temporary_StatusList\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK( \"type\" IN ('StatusList2021', 'OAuthStatusList') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK( \"driverType\" IN ('agent_typeorm','agent_kv_store','github','agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK( \"credentialIdMode\" IN ('ISSUANCE','PERSISTENCE','NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK( \"proofFormat\" IN ('lds','jwt', 'vc+jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK( \"indexingDirection\" IN ('rightToLeft') ),\n \"statusPurpose\" varchar,\n \"statusListCredential\" text,\n \"bitsPerStatus\" integer,\n \"expiresAt\" datetime,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )\n `)\n\n await queryRunner.query(`\n INSERT INTO \"temporary_StatusList\"(\n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\", \"bitsPerStatus\", \"expiresAt\"\n )\n SELECT \n \"id\", \"correlationId\", \"length\", \"issuer\", \n CASE WHEN \"type\" = 'BitstringStatusList' THEN 'StatusList2021' ELSE \"type\" END,\n \"driverType\", \"credentialIdMode\", \"proofFormat\", \"indexingDirection\",\n \"statusPurpose\", \"statusListCredential\", \"bitsPerStatus\", \"expiresAt\"\n FROM \"StatusList\"\n `)\n\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusList\" RENAME TO \"StatusList\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { CreateDcqlQueryItemPG1726588800000 } from '../postgres/1726588800000-CreateDcqlQueryItem'\nimport { CreateDcqlQueryItemSQlite1726617600000 } from '../sqlite/1726617600000-CreateDcqlQueryItem'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateDcqlQueryItem1726617600000 implements MigrationInterface {\n name = 'CreateDcqlQueryItem1726617600000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: updating presentation definition item nullable fields')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateDcqlQueryItemPG1726588800000 = new CreateDcqlQueryItemPG1726588800000()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateDcqlQueryItemSQlite1726617600000 = new CreateDcqlQueryItemSQlite1726617600000()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting presentation definition item nullable fields')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateDcqlQueryItemPG1726588800000 = new CreateDcqlQueryItemPG1726588800000()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateDcqlQueryItemSQlite1726617600000 = new CreateDcqlQueryItemSQlite1726617600000()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateDcqlQueryItemPG1726588800000 implements MigrationInterface {\n name = 'CreateDcqlQueryItemPG1726588800000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"DcqlQueryItem\" (\n \"id\" uuid NOT NULL DEFAULT uuid_generate_v4(),\n \"tenant_id\" TEXT,\n \"query_id\" TEXT NOT NULL,\n \"name\" TEXT,\n \"version\" TEXT NOT NULL,\n \"purpose\" TEXT,\n \"query\" TEXT NOT NULL,\n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(),\n CONSTRAINT \"PK_DcqlQueryItem_id\" PRIMARY KEY (\"id\"))\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"DcqlQueryItem\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateDcqlQueryItemSQlite1726617600000 implements MigrationInterface {\n name = 'CreateDcqlQueryItemSQlite1726617600000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"DcqlQueryItem\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"tenant_id\" varchar,\n \"query_id\" varchar NOT NULL,\n \"name\" varchar,\n \"version\" varchar NOT NULL,\n \"purpose\" varchar,\n \"query\" varchar NOT NULL,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"DcqlQueryItem\"`)\n }\n}\n","import Debug, { Debugger } from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { AddLinkedVpFields1763387280001 } from '../postgres/1763387280001-AddLinkedVpFields'\nimport { AddLinkedVpFields1763387280002 } from '../sqlite/1763387280002-AddLinkedVpFields'\n\nconst debug: Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class AddLinkedVpFields1763387280000 implements MigrationInterface {\n name: string = 'AddLinkedVpFields1763387280000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: adding linked VP fields to DigitalCredential table')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file for AddLinkedVpFields')\n const mig: AddLinkedVpFields1763387280001 = new AddLinkedVpFields1763387280001()\n await mig.up(queryRunner)\n debug('Postgres migration statements for AddLinkedVpFields executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file for AddLinkedVpFields')\n const mig: AddLinkedVpFields1763387280002 = new AddLinkedVpFields1763387280002()\n await mig.up(queryRunner)\n debug('SQLite migration statements for AddLinkedVpFields executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo, and postgres for AddLinkedVpFields. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting linked VP fields from DigitalCredential table')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file for AddLinkedVpFields')\n const mig: AddLinkedVpFields1763387280001 = new AddLinkedVpFields1763387280001()\n await mig.down(queryRunner)\n debug('Postgres migration statements for AddLinkedVpFields reverted')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file for AddLinkedVpFields')\n const mig: AddLinkedVpFields1763387280002 = new AddLinkedVpFields1763387280002()\n await mig.down(queryRunner)\n debug('SQLite migration statements for AddLinkedVpFields reverted')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo, and postgres for AddLinkedVpFields. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class AddLinkedVpFields1763387280001 implements MigrationInterface {\n name = 'AddLinkedVpFields1763387280001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n ADD COLUMN \"linked_vp_id\" text\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n ADD COLUMN \"linked_vp_from\" TIMESTAMP\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n ADD COLUMN \"linked_vp_until\" TIMESTAMP\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\"\n DROP COLUMN \"linked_vp_until\"\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n DROP COLUMN \"linked_vp_from\"\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n DROP COLUMN \"linked_vp_id\"\n `)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class AddLinkedVpFields1763387280002 implements MigrationInterface {\n name = 'AddLinkedVpFields1763387280002'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n ADD COLUMN \"linked_vp_id\" text\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n ADD COLUMN \"linked_vp_from\" datetime\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n ADD COLUMN \"linked_vp_until\" datetime\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n DROP COLUMN \"linked_vp_from\"\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n DROP COLUMN \"linked_vp_until\"\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"DigitalCredential\" \n DROP COLUMN \"linked_vp_id\"\n `)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateIssuanceBranding1685628974232 } from '../postgres/1685628974232-CreateIssuanceBranding'\nimport { CreateIssuanceBranding1685628973231 } from '../sqlite/1685628973231-CreateIssuanceBranding'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateIssuanceBranding1659463079429 implements MigrationInterface {\n name = 'CreateIssuanceBranding1659463079429'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating issuance branding tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateIssuanceBranding1685628974232 = new CreateIssuanceBranding1685628974232()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateIssuanceBranding1685628973231 = new CreateIssuanceBranding1685628973231()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting issuance branding tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateIssuanceBranding1685628974232 = new CreateIssuanceBranding1685628974232()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateIssuanceBranding1685628973231 = new CreateIssuanceBranding1685628973231()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateContacts1690925872592 } from '../postgres/1690925872592-CreateContacts'\nimport { CreateContacts1690925872693 } from '../sqlite/1690925872693-CreateContacts'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateContacts1690925872318 implements MigrationInterface {\n name = 'CreateContacts1690925872318'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating contacts tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1690925872592 = new CreateContacts1690925872592()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1690925872693 = new CreateContacts1690925872693()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting contacts tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1690925872592 = new CreateContacts1690925872592()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1690925872693 = new CreateContacts1690925872693()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { enablePostgresUuidExtension } from '@sphereon/ssi-sdk.core'\nimport { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1690925872592 implements MigrationInterface {\n name = 'CreateContacts1690925872592'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await enablePostgresUuidExtension(queryRunner)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP CONSTRAINT \"FK_CorrelationIdentifier_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" DROP CONSTRAINT \"FK_IdentityMetadata_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP CONSTRAINT \"FK_Identity_contactId\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP CONSTRAINT \"FK_Connection_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" RENAME COLUMN \"identityId\" TO \"identity_id\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" RENAME COLUMN \"identityId\" TO \"identity_id\"`)\n await queryRunner.query(`CREATE TYPE \"public\".\"PartyType_type_enum\" AS ENUM('naturalPerson', 'organization')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"PartyOrigin_type_enum\" AS ENUM('INTERNAL', 'EXTERNAL')`)\n await queryRunner.query(\n `CREATE TABLE \"PartyType\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" \"public\".\"PartyType_type_enum\" NOT NULL, \"origin\" \"public\".\"PartyOrigin_type_enum\" NOT NULL, \"name\" character varying(255) NOT NULL, \"description\" character varying(255), \"tenant_id\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"UQ_PartyType_name\" UNIQUE (\"name\"), CONSTRAINT \"PK_PartyType_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyType_type_tenant_id\" ON \"PartyType\" (\"type\", \"tenant_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"BaseContact\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"legal_name\" character varying(255), \"display_name\" character varying(255), \"first_name\" character varying(255), \"middle_name\" character varying(255), \"last_name\" character varying(255), \"type\" character varying NOT NULL, \"party_id\" uuid, CONSTRAINT \"UQ_BaseContact_legal_name\" UNIQUE (\"legal_name\"), CONSTRAINT \"REL_BaseContact_party_id\" UNIQUE (\"party_id\"), CONSTRAINT \"PK_BaseContact_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseContact_type\" ON \"BaseContact\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"PartyRelationship\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"left_id\" uuid NOT NULL, \"right_id\" uuid NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"PK_PartyRelationship_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyRelationship_left_right\" ON \"PartyRelationship\" (\"left_id\", \"right_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"ElectronicAddress\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" character varying(255) NOT NULL, \"electronic_address\" character varying(255) NOT NULL, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"partyId\" uuid, CONSTRAINT \"PK_ElectronicAddress_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"PhysicalAddress\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"type\" character varying(255) NOT NULL, \"street_name\" character varying(255) NOT NULL, \"street_number\" character varying(255) NOT NULL, \"postal_code\" character varying(255) NOT NULL, \"city_name\" character varying(255) NOT NULL, \"province_name\" character varying(255) NOT NULL, \"country_code\" character varying(2) NOT NULL, \"building_name\" character varying(255), \"partyId\" uuid, \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT \"PK_PhysicalAddress_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"Party\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"uri\" character varying(255), \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"party_type_id\" uuid NOT NULL, CONSTRAINT \"PK_Party_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BaseConfig\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"identifier\" character varying(255), \"redirect_url\" character varying(255), \"session_id\" character varying(255), \"client_id\" character varying(255), \"client_secret\" character varying(255), \"scopes\" text, \"issuer\" character varying(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" character varying NOT NULL, \"connection_id\" uuid, CONSTRAINT \"REL_BaseConfig_connection_id\" UNIQUE (\"connection_id\"), CONSTRAINT \"PK_BaseConfig_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfig_type\" ON \"BaseConfig\" (\"type\")`)\n await queryRunner.query(`ALTER TABLE \"Identity\" RENAME COLUMN \"contactId\" TO \"partyId\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" ALTER COLUMN \"roles\" SET NOT NULL`)\n await queryRunner.query(`CREATE TYPE \"public\".\"IdentityOrigin_type_enum\" AS ENUM('INTERNAL', 'EXTERNAL')`)\n await queryRunner.query(`ALTER TABLE \"Identity\" ADD COLUMN \"origin\" \"public\".\"IdentityOrigin_type_enum\" DEFAULT 'EXTERNAL' NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"Identity\" ALTER COLUMN \"origin\" DROP DEFAULT`)\n\n await queryRunner.query(\n `ALTER TABLE \"CorrelationIdentifier\" ADD CONSTRAINT \"FK_CorrelationIdentifier_identity_id\" FOREIGN KEY (\"identity_id\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"IdentityMetadata\" ADD CONSTRAINT \"FK_IdentityMetadata_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseContact\" ADD CONSTRAINT \"FK_BaseContact_party_id\" FOREIGN KEY (\"party_id\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"PartyRelationship\" ADD CONSTRAINT \"FK_PartyRelationship_left_id\" FOREIGN KEY (\"left_id\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"PartyRelationship\" ADD CONSTRAINT \"FK_PartyRelationship_right_id\" FOREIGN KEY (\"right_id\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"ElectronicAddress\" ADD CONSTRAINT \"FK_ElectronicAddress_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"PhysicalAddress\" ADD CONSTRAINT \"FK_PhysicalAddress_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Party\" ADD CONSTRAINT \"FK_Party_party_type_id\" FOREIGN KEY (\"party_type_id\") REFERENCES \"PartyType\"(\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Identity\" ADD CONSTRAINT \"FK_Identity_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Connection\" ADD CONSTRAINT \"FK_Connection_identity_id\" FOREIGN KEY (\"identity_id\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"BaseConfig\" ADD CONSTRAINT \"FK_BaseConfig_connection_id\" FOREIGN KEY (\"connection_id\") REFERENCES \"Connection\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n\n // migrate existing data\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" RENAME CONSTRAINT \"UQ_Correlation_id\" TO \"UQ_CorrelationIdentifier_correlation_id\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" RENAME CONSTRAINT \"UQ_Identity_Alias\" TO \"UQ_Identity_alias\"`)\n await queryRunner.query(\n `INSERT INTO \"BaseConfig\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connectionId\" FROM \"BaseConfigEntity\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n await queryRunner.query(\n `INSERT INTO \"PartyType\"(id, type, origin, name, description, tenant_id, created_at, last_updated_at) VALUES ('3875c12e-fdaa-4ef6-a340-c936e054b627', 'organization', 'INTERNAL', 'Sphereon_default_organization_type', 'sphereon_default_organization', '95e09cfc-c974-4174-86aa-7bf1d5251fb4', now(), now())`,\n )\n await queryRunner.query(\n `INSERT INTO \"PartyType\"(id, type, origin, name, description, tenant_id, created_at, last_updated_at) VALUES ('7d248798-41ca-4fc1-a130-9934b43d532e', 'naturalPerson', 'INTERNAL', 'Sphereon_default_natural_person_type', 'sphereon_default_natural_person', '95e09cfc-c974-4174-86aa-7bf1d5251fb4', now(), now())`,\n )\n await queryRunner.query(\n `INSERT INTO \"Party\"(id, uri, created_at, last_updated_at, party_type_id) SELECT id, uri, created_at, last_updated_at, '3875c12e-fdaa-4ef6-a340-c936e054b627' FROM \"Contact\"`,\n )\n await queryRunner.query(\n `INSERT INTO \"BaseContact\"(id, legal_name, display_name, party_id, created_at, last_updated_at, type) SELECT id, name, alias, id, created_at, last_updated_at, 'Organization' FROM \"Contact\"`,\n )\n await queryRunner.query(`DROP TABLE \"Contact\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP CONSTRAINT \"FK_BaseConfig_connection_id\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP CONSTRAINT \"FK_Connection_identity_id\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP CONSTRAINT \"FK_Identity_partyId\"`)\n await queryRunner.query(`ALTER TABLE \"Party\" DROP CONSTRAINT \"FK_Party_party_type_id\"`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP CONSTRAINT \"FK_PhysicalAddress_partyId\"`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP CONSTRAINT \"FK_ElectronicAddress_partyId\"`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP CONSTRAINT \"FK_PartyRelationship_right_id\"`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP CONSTRAINT \"FK_PartyRelationship_left_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP CONSTRAINT \"FK_BaseContact_party_id\"`)\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" DROP CONSTRAINT \"FK_IdentityMetadata_identityId\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP CONSTRAINT \"FK_CorrelationIdentifier_identity_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" ALTER COLUMN \"roles\" DROP NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"origin\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"IdentityOrigin_type_enum\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" RENAME COLUMN \"partyId\" TO \"contactId\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" RENAME COLUMN \"identity_id\" TO \"identityId\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" RENAME COLUMN \"identity_id\" TO \"identityId\"`)\n\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfig_type\"`)\n await queryRunner.query(`DROP TABLE \"BaseConfig\"`)\n await queryRunner.query(`DROP TABLE \"Party\"`)\n await queryRunner.query(`DROP INDEX \"IDX_PartyRelationship_left_right\"`)\n await queryRunner.query(`DROP TABLE \"PartyRelationship\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseContact_type\"`)\n await queryRunner.query(`DROP TABLE \"BaseContact\"`)\n await queryRunner.query(`DROP TABLE \"ElectronicAddress\"`)\n await queryRunner.query(`DROP TABLE \"PhysicalAddress\"`)\n await queryRunner.query(`DROP INDEX \"IDX_PartyType_type_tenant_id\"`)\n await queryRunner.query(`DROP TABLE \"PartyType\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"PartyOrigin_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"PartyType_type_enum\"`)\n\n await queryRunner.query(\n `ALTER TABLE \"Connection\" ADD CONSTRAINT \"FK_Connection_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"Identity\" ADD CONSTRAINT \"FK_Identity_contactId\" FOREIGN KEY (\"contactId\") REFERENCES \"Contact\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"IdentityMetadata\" ADD CONSTRAINT \"FK_IdentityMetadata_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n await queryRunner.query(\n `ALTER TABLE \"CorrelationIdentifier\" ADD CONSTRAINT \"FK_CorrelationIdentifier_identityId\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\"(\"id\") ON DELETE CASCADE ON UPDATE NO ACTION`,\n )\n\n await queryRunner.query(\n `CREATE TABLE \"Contact\" (\"id\" uuid NOT NULL DEFAULT uuid_generate_v4(), \"uri\" character varying(255), \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \"name\" character varying(255), \"alias\" character varying(255), CONSTRAINT \"PK_Contact_id\" PRIMARY KEY (\"id\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"Contact\"(id, uri, created_at, last_updated_at, name, alias) SELECT id, uri, created_at, last_updated_at, (SELECT legal_name FROM \"BaseContact\" WHERE \"BaseContact\".\"party_id\" = \"Party\".\"id\"), (SELECT display_name FROM \"BaseContact\" WHERE \"BaseContact\".\"party_id\" = \"Party\".\"id\") FROM \"Party\" WHERE party_type_id = '3875c12e-fdaa-4ef6-a340-c936e054b627'`,\n )\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1690925872693 implements MigrationInterface {\n name = 'CreateContacts1690925872693'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"temporary_CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identityId\"), CONSTRAINT \"UQ_CorrelationIdentifier_correlation_id\" UNIQUE (\"correlation_id\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identityId\") SELECT \"id\", \"type\", \"correlation_id\", \"identityId\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_CorrelationIdentifier\" RENAME TO \"CorrelationIdentifier\"`)\n // roles not null\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"contactId\" varchar, CONSTRAINT \"UQ_Identity_alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\") SELECT \"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identityId\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identityId\"))`,\n )\n await queryRunner.query(`INSERT INTO \"temporary_Connection\"(\"id\", \"type\", \"identityId\") SELECT \"id\", \"type\", \"identityId\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Connection\" RENAME TO \"Connection\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identity_id\" varchar, CONSTRAINT \"REL_CorrelationIdentifier_identityId\" UNIQUE (\"identity_id\"), CONSTRAINT \"UQ_CorrelationIdentifier_correlation_id\" UNIQUE (\"correlation_id\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identity_id\") SELECT \"id\", \"type\", \"correlation_id\", \"identityId\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_CorrelationIdentifier\" RENAME TO \"CorrelationIdentifier\"`)\n // contactId -> partyId\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"partyId\" varchar, CONSTRAINT \"UQ_Identity_alias\" UNIQUE (\"alias\"))`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"partyId\") SELECT \"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"contactId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identity_id\" varchar, CONSTRAINT \"REL_Connection_identityId\" UNIQUE (\"identity_id\"))`,\n )\n await queryRunner.query(`INSERT INTO \"temporary_Connection\"(\"id\", \"type\", \"identity_id\") SELECT \"id\", \"type\", \"identityId\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Connection\" RENAME TO \"Connection\"`)\n await queryRunner.query(\n `CREATE TABLE \"PartyType\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('naturalPerson','organization') ) NOT NULL, \"origin\" varchar CHECK( \"origin\" IN ('INTERNAL', 'EXTERNAL') ) NOT NULL, \"name\" varchar(255) NOT NULL, \"description\" varchar(255), \"tenant_id\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"UQ_PartyType_name\" UNIQUE (\"name\"))`,\n )\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyType_type_tenant_id\" ON \"PartyType\" (\"type\", \"tenant_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"BaseContact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"legal_name\" varchar(255), \"display_name\" varchar(255), \"first_name\" varchar(255), \"middle_name\" varchar(255), \"last_name\" varchar(255), \"type\" varchar NOT NULL, \"party_id\" varchar, CONSTRAINT \"UQ_BaseContact_legal_name\" UNIQUE (\"legal_name\"), CONSTRAINT \"REL_BaseContact_party_id\" UNIQUE (\"party_id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseContact_type\" ON \"BaseContact\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"PartyRelationship\" (\"id\" varchar PRIMARY KEY NOT NULL, \"left_id\" varchar NOT NULL, \"right_id\" varchar NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')))`,\n )\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyRelationship_left_right\" ON \"PartyRelationship\" (\"left_id\", \"right_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"Party\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"party_type_id\" varchar NOT NULL)`,\n )\n await queryRunner.query(\n `CREATE TABLE \"BaseConfig\" (\"id\" varchar PRIMARY KEY NOT NULL, \"identifier\" varchar(255), \"redirect_url\" varchar(255), \"session_id\" varchar(255), \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" varchar NOT NULL, \"connection_id\" varchar, CONSTRAINT \"REL_BaseConfig_connection_id\" UNIQUE (\"connection_id\"))`,\n )\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfig_type\" ON \"BaseConfig\" (\"type\")`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_CorrelationIdentifier\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('did','url') ) NOT NULL, \"correlation_id\" text NOT NULL, \"identity_id\" varchar, CONSTRAINT \"REL_CorrelationIdentifier_identity_id\" UNIQUE (\"identity_id\"), CONSTRAINT \"UQ_CorrelationIdentifier_correlation_id\" UNIQUE (\"correlation_id\"), CONSTRAINT \"FK_CorrelationIdentifier_identity_id\" FOREIGN KEY (\"identity_id\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_CorrelationIdentifier\"(\"id\", \"type\", \"correlation_id\", \"identity_id\") SELECT \"id\", \"type\", \"correlation_id\", \"identity_id\" FROM \"CorrelationIdentifier\"`,\n )\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_CorrelationIdentifier\" RENAME TO \"CorrelationIdentifier\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseContact_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseContact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"legal_name\" varchar(255), \"display_name\" varchar(255), \"first_name\" varchar(255), \"middle_name\" varchar(255), \"last_name\" varchar(255), \"type\" varchar NOT NULL, \"party_id\" varchar, CONSTRAINT \"UQ_BaseContact_legal_name\" UNIQUE (\"legal_name\"), CONSTRAINT \"REL_BaseContact_party_id\" UNIQUE (\"party_id\"), CONSTRAINT \"FK_BaseContact_party_id\" FOREIGN KEY (\"party_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseContact\"(\"id\", \"created_at\", \"last_updated_at\", \"legal_name\", \"display_name\", \"first_name\", \"middle_name\", \"last_name\", \"type\", \"party_id\") SELECT \"id\", \"created_at\", \"last_updated_at\", \"legal_name\", \"display_name\", \"first_name\", \"middle_name\", \"last_name\", \"type\", \"party_id\" FROM \"BaseContact\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseContact\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseContact\" RENAME TO \"BaseContact\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseContact_type\" ON \"BaseContact\" (\"type\")`)\n await queryRunner.query(`DROP INDEX \"IDX_PartyRelationship_left_right\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_PartyRelationship\" (\"id\" varchar PRIMARY KEY NOT NULL, \"left_id\" varchar NOT NULL, \"right_id\" varchar NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"FK_PartyRelationship_left_id\" FOREIGN KEY (\"left_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_PartyRelationship_right_id\" FOREIGN KEY (\"right_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_PartyRelationship\"(\"id\", \"left_id\", \"right_id\", \"created_at\", \"last_updated_at\") SELECT \"id\", \"left_id\", \"right_id\", \"created_at\", \"last_updated_at\" FROM \"PartyRelationship\"`,\n )\n await queryRunner.query(`DROP TABLE \"PartyRelationship\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_PartyRelationship\" RENAME TO \"PartyRelationship\"`)\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyRelationship_left_right\" ON \"PartyRelationship\" (\"left_id\", \"right_id\")`)\n await queryRunner.query(\n `CREATE TABLE \"ElectronicAddress\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar(255) NOT NULL, \"electronic_address\" varchar(255) NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"partyId\" varchar, CONSTRAINT \"FK_ElectronicAddress_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `CREATE TABLE \"PhysicalAddress\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar(255) NOT NULL, \"street_name\" varchar(255) NOT NULL, \"street_number\" varchar(255) NOT NULL, \"postal_code\" varchar(255) NOT NULL, \"city_name\" varchar(255) NOT NULL, \"province_name\" varchar(255) NOT NULL, \"country_code\" varchar(2) NOT NULL, \"building_name\" varchar(255), \"partyId\" varchar, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"FK_PhysicalAddressEntity_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `CREATE TABLE \"temporary_Party\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"party_type_id\" varchar NOT NULL, CONSTRAINT \"FK_Party_party_type_id\" FOREIGN KEY (\"party_type_id\") REFERENCES \"PartyType\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Party\"(\"id\", \"uri\", \"created_at\", \"last_updated_at\", \"party_type_id\") SELECT \"id\", \"uri\", \"created_at\", \"last_updated_at\", \"party_type_id\" FROM \"Party\"`,\n )\n await queryRunner.query(`DROP TABLE \"Party\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Party\" RENAME TO \"Party\"`)\n // Restore lost FK_Identity_partyId\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"alias\" varchar(255) NOT NULL, \"roles\" text NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"partyId\" varchar, CONSTRAINT \"UQ_Identity_alias\" UNIQUE (\"alias\"), CONSTRAINT \"FK_Identity_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"partyId\") SELECT \"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"partyId\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_Connection\" (\"id\" varchar PRIMARY KEY NOT NULL, \"type\" varchar CHECK( \"type\" IN ('OIDC','SIOPv2','SIOPv2+OpenID4VP') ) NOT NULL, \"identity_id\" varchar, CONSTRAINT \"REL_Connection_identity_id\" UNIQUE (\"identity_id\"), CONSTRAINT \"FK_Connection_identity_id\" FOREIGN KEY (\"identity_id\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(`INSERT INTO \"temporary_Connection\"(\"id\", \"type\", \"identity_id\") SELECT \"id\", \"type\", \"identity_id\" FROM \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Connection\" RENAME TO \"Connection\"`)\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfig_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseConfig\" (\"id\" varchar PRIMARY KEY NOT NULL, \"identifier\" varchar(255), \"redirect_url\" varchar(255), \"session_id\" varchar(255), \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" varchar NOT NULL, \"connection_id\" varchar, CONSTRAINT \"REL_BaseConfig_connection_id\" UNIQUE (\"connection_id\"), CONSTRAINT \"FK_BaseConfig_connection_id\" FOREIGN KEY (\"connection_id\") REFERENCES \"Connection\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseConfig\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\" FROM \"BaseConfig\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfig\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseConfig\" RENAME TO \"BaseConfig\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfig_type\" ON \"BaseConfig\" (\"type\")`)\n\n // migrate existing data\n await queryRunner.query(\n `INSERT INTO \"BaseConfig\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connectionId\" FROM \"BaseConfigEntity\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfigEntity\"`)\n await queryRunner.query(\n `INSERT INTO \"PartyType\"(id, type, origin, name, description, tenant_id, created_at, last_updated_at) VALUES ('3875c12e-fdaa-4ef6-a340-c936e054b627', 'organization', 'INTERNAL', 'Sphereon_default_organization_type', 'sphereon_default_organization', '95e09cfc-c974-4174-86aa-7bf1d5251fb4', datetime('now'), datetime('now'))`,\n )\n await queryRunner.query(\n `INSERT INTO \"PartyType\"(id, type, origin, name, description, tenant_id, created_at, last_updated_at) VALUES ('7d248798-41ca-4fc1-a130-9934b43d532e', 'naturalPerson', 'INTERNAL', 'Sphereon_default_natural_person_type', 'sphereon_default_natural_person', '95e09cfc-c974-4174-86aa-7bf1d5251fb4', datetime('now'), datetime('now'))`,\n )\n await queryRunner.query(\n `INSERT INTO \"Party\"(id, uri, created_at, last_updated_at, party_type_id) SELECT id, uri, created_at, last_updated_at, '3875c12e-fdaa-4ef6-a340-c936e054b627' FROM \"Contact\"`,\n )\n await queryRunner.query(\n `INSERT INTO \"BaseContact\"(id, legal_name, display_name, party_id, created_at, last_updated_at, type) SELECT id, name, alias, id, created_at, last_updated_at, 'Organization' FROM \"Contact\"`,\n )\n await queryRunner.query(`DROP TABLE \"Contact\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"Contact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"name\" varchar(255), \"alias\" varchar(255))`,\n )\n await queryRunner.query(\n `INSERT INTO \"Contact\"(id, uri, created_at, last_updated_at, name, alias) SELECT id, uri, created_at, last_updated_at, (SELECT legal_name FROM \"BaseContact\" WHERE \"BaseContact\".\"party_id\" = \"Party\".\"id\"), (SELECT display_name FROM \"BaseContact\" WHERE \"BaseContact\".\"party_id\" = \"Party\".\"id\") FROM \"Party\" WHERE party_type_id = '3875c12e-fdaa-4ef6-a340-c936e054b627'`,\n )\n await queryRunner.query(`DROP TABLE \"BaseContact\"`)\n await queryRunner.query(`DROP TABLE \"Party\"`)\n\n await queryRunner.query(\n `CREATE TABLE \"BaseConfigEntity\" (\"id\" varchar PRIMARY KEY NOT NULL, \"identifier\" varchar(255), \"redirect_url\" varchar(255), \"session_id\" varchar(255), \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" varchar NOT NULL, \"connectionId\" varchar)`,\n )\n await queryRunner.query(\n `INSERT INTO \"BaseConfigEntity\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connectionId\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\" FROM \"BaseConfig\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfig\"`)\n\n await queryRunner.query(\n `CREATE TABLE \"temporary_Party\" (\"id\" varchar PRIMARY KEY NOT NULL, \"uri\" varchar(255), \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"party_type_id\" varchar NOT NULL, CONSTRAINT \"FK_Party_party_type_id\" FOREIGN KEY (\"party_type_id\") REFERENCES \"PartyType\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Party\"(\"id\", \"uri\", \"created_at\", \"last_updated_at\", \"party_type_id\") SELECT \"id\", \"uri\", \"created_at\", \"last_updated_at\", \"party_type_id\" FROM \"Party\"`,\n )\n await queryRunner.query(`DROP TABLE \"Party\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Party\" RENAME TO \"Party\"`)\n\n await queryRunner.query(`DROP INDEX \"IDX_PartyRelationship_left_right\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_PartyRelationship\" (\"id\" varchar PRIMARY KEY NOT NULL, \"left_id\" varchar NOT NULL, \"right_id\" varchar NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT \"FK_PartyRelationship_left_id\" FOREIGN KEY (\"left_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT \"FK_PartyRelationship_right_id\" FOREIGN KEY (\"right_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_PartyRelationship\"(\"id\", \"left_id\", \"right_id\", \"created_at\", \"last_updated_at\") SELECT \"id\", \"left_id\", \"right_id\", \"created_at\", \"last_updated_at\" FROM \"PartyRelationship\"`,\n )\n await queryRunner.query(`DROP TABLE \"PartyRelationship\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_PartyRelationship\" RENAME TO \"PartyRelationship\"`)\n await queryRunner.query(`CREATE UNIQUE INDEX \"IDX_PartyRelationship_left_right\" ON \"PartyRelationship\" (\"left_id\", \"right_id\")`)\n\n await queryRunner.query(`DROP INDEX \"IDX_BaseContact_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseContact\" (\"id\" varchar PRIMARY KEY NOT NULL, \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')), \"legal_name\" varchar(255), \"display_name\" varchar(255), \"first_name\" varchar(255), \"middle_name\" varchar(255), \"last_name\" varchar(255), \"type\" varchar NOT NULL, \"party_id\" varchar, CONSTRAINT \"UQ_BaseContact_legal_name\" UNIQUE (\"legal_name\"), CONSTRAINT \"REL_BaseContact_party_id\" UNIQUE (\"party_id\"), CONSTRAINT \"FK_BaseContact_party_id\" FOREIGN KEY (\"party_id\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseContact\"(\"id\", \"created_at\", \"last_updated_at\", \"legal_name\", \"display_name\", \"first_name\", \"middle_name\", \"last_name\", \"type\", \"party_id\") SELECT \"id\", \"created_at\", \"last_updated_at\", \"legal_name\", \"display_name\", \"first_name\", \"middle_name\", \"last_name\", \"type\", \"party_id\" FROM \"BaseContact\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseContact\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseContact\" RENAME TO \"BaseContact\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseContact_type\" ON \"BaseContact\" (\"type\")`)\n\n await queryRunner.query(`DROP INDEX \"IDX_BaseConfig_type\"`)\n await queryRunner.query(\n `CREATE TABLE \"temporary_BaseConfig\" (\"id\" varchar PRIMARY KEY NOT NULL, \"identifier\" varchar(255), \"redirect_url\" varchar(255), \"session_id\" varchar(255), \"client_id\" varchar(255), \"client_secret\" varchar(255), \"scopes\" text, \"issuer\" varchar(255), \"dangerously_allow_insecure_http_requests\" boolean, \"client_auth_method\" text, \"type\" varchar NOT NULL, \"connection_id\" varchar, CONSTRAINT \"REL_BaseConfig_connection_id\" UNIQUE (\"connection_id\"), CONSTRAINT \"FK_BaseConfig_connection_id\" FOREIGN KEY (\"connection_id\") REFERENCES \"Connection\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION)`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_BaseConfig\"(\"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\") SELECT \"id\", \"identifier\", \"redirect_url\", \"session_id\", \"client_id\", \"client_secret\", \"scopes\", \"issuer\", \"dangerously_allow_insecure_http_requests\", \"client_auth_method\", \"type\", \"connection_id\" FROM \"BaseConfig\"`,\n )\n await queryRunner.query(`DROP TABLE \"BaseConfig\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_BaseConfig\" RENAME TO \"BaseConfig\"`)\n await queryRunner.query(`CREATE INDEX \"IDX_BaseConfig_type\" ON \"BaseConfig\" (\"type\")`)\n\n await queryRunner.query(`DROP INDEX \"IDX_PartyType_type_tenant_id\"`)\n await queryRunner.query(`DROP TABLE \"PartyType\"`)\n await queryRunner.query(`DROP TABLE \"Connection\"`)\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`DROP TABLE \"CorrelationIdentifier\"`)\n await queryRunner.query(`DROP TABLE \"ElectronicAddress\"`)\n await queryRunner.query(`DROP TABLE \"PhysicalAddress\"`)\n }\n}\n","import Debug from 'debug'\nimport { MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateStatusList1693866470001 } from '../postgres/1693866470001-CreateStatusList'\nimport { UpdateStatusList1737110469001 } from '../postgres/1737110469001-UpdateStatusList'\nimport { CreateStatusList1693866470002 } from '../sqlite/1693866470000-CreateStatusList'\nimport { UpdateStatusList1737110469000 } from '../sqlite/1737110469000-UpdateStatusList'\n\nconst debug = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateStatusList1693866470000 implements MigrationInterface {\n name = 'CreateStatusList1693866470000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating issuance branding tables')\n const dbType = queryRunner.connection.driver.options.type\n if (dbType === 'postgres') {\n debug('using postgres migration files')\n const createMig = new CreateStatusList1693866470001()\n await createMig.up(queryRunner)\n const updateMig = new UpdateStatusList1737110469001()\n const up = await updateMig.up(queryRunner)\n debug('Migration statements executed')\n return up\n } else if (dbType === 'sqlite' || dbType === 'react-native' || dbType === 'expo') {\n debug('using sqlite/react-native migration files')\n const createMig = new CreateStatusList1693866470002()\n await createMig.up(queryRunner)\n const updateMig = new UpdateStatusList1737110469000()\n const up = await updateMig.up(queryRunner)\n debug('Migration statements executed')\n return up\n } else {\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting issuance branding tables')\n const dbType = queryRunner.connection.driver.options.type\n if (dbType === 'postgres') {\n debug('using postgres migration files')\n const updateMig = new UpdateStatusList1737110469001()\n await updateMig.down(queryRunner)\n const createMig = new CreateStatusList1693866470001()\n const down = await createMig.down(queryRunner)\n debug('Migration statements executed')\n return down\n } else if (dbType === 'sqlite' || dbType === 'react-native' || dbType === 'expo') {\n debug('using sqlite/react-native migration files')\n const updateMig = new UpdateStatusList1737110469000()\n await updateMig.down(queryRunner)\n const createMig = new CreateStatusList1693866470002()\n const down = await createMig.down(queryRunner)\n debug('Migration statements executed')\n return down\n } else {\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","// noinspection SqlPostgresDialect SqlNoDataSourceInspection\nimport { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateStatusList1693866470001 implements MigrationInterface {\n name = 'CreateStatusList1693866470001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`CREATE TYPE \"StatusList_type_enum\" AS ENUM('StatusList2021')`)\n await queryRunner.query(`CREATE TYPE \"StatusList_drivertype_enum\" AS ENUM('agent_typeorm', 'agent_kv_store', 'github', 'agent_filesystem')`)\n await queryRunner.query(`CREATE TYPE \"StatusList_credentialidmode_enum\" AS ENUM('ISSUANCE', 'PERSISTENCE', 'NEVER')`)\n\n await queryRunner.query(\n `CREATE TABLE \"StatusListEntry\"\n (\n \"statusListId\" character varying NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" character varying,\n \"credentialHash\" character varying(128),\n \"correlationId\" character varying(255),\n \"value\" character varying(50),\n CONSTRAINT \"PK_68704d2d13857360c6b44a3d1d0\" PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )`,\n )\n await queryRunner.query(\n `CREATE TABLE \"StatusList\"\n (\n \"id\" character varying NOT NULL,\n \"correlationId\" character varying NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" \"StatusList_type_enum\" NOT NULL DEFAULT 'StatusList2021',\n \"driverType\" \"StatusList_drivertype_enum\" NOT NULL DEFAULT 'agent_typeorm',\n \"credentialIdMode\" \"StatusList_credentialidmode_enum\" NOT NULL DEFAULT 'ISSUANCE',\n \"proofFormat\" character varying NOT NULL DEFAULT 'lds',\n \"indexingDirection\" character varying NOT NULL DEFAULT 'rightToLeft',\n \"statusPurpose\" character varying NOT NULL DEFAULT 'revocation',\n \"statusListCredential\" text,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\"),\n CONSTRAINT \"PK_StatusList_Id\" PRIMARY KEY (\"id\")\n )`,\n )\n await queryRunner.query(\n `ALTER TABLE \"StatusListEntry\"\n ADD CONSTRAINT \"FK_statusListEntry_statusListId\" FOREIGN KEY (\"statusListId\") REFERENCES \"StatusList\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"StatusListEntry\"\n DROP CONSTRAINT \"FK_statusListEntry_statusListId\"`)\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`DROP TYPE \"StatusList_credentialidmode_enum\"`)\n await queryRunner.query(`DROP TYPE \"StatusList_drivertype_enum\"`)\n await queryRunner.query(`DROP TYPE \"StatusList_type_enum\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class UpdateStatusList1737110469001 implements MigrationInterface {\n name = 'UpdateStatusList1737110469001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Add new enum value\n await queryRunner.query(`ALTER TYPE \"StatusList_type_enum\" ADD VALUE 'OAuthStatusList'`)\n\n // Make columns nullable and add new columns\n await queryRunner.query(`ALTER TABLE \"StatusList\" ALTER COLUMN \"indexingDirection\" DROP NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ALTER COLUMN \"statusPurpose\" DROP NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD \"bitsPerStatus\" integer DEFAULT 1`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ADD \"expiresAt\" timestamp with time zone`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"expiresAt\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" DROP COLUMN \"bitsPerStatus\"`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ALTER COLUMN \"statusPurpose\" SET NOT NULL`)\n await queryRunner.query(`ALTER TABLE \"StatusList\" ALTER COLUMN \"indexingDirection\" SET NOT NULL`)\n\n // Note: Cannot remove enum value in Postgres, would need to recreate the type\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateStatusList1693866470002 implements MigrationInterface {\n name = 'CreateStatusList1693866470002'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"StatusListEntry\"\n (\n \"statusListId\" varchar NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" varchar,\n \"credentialHash\" varchar(128),\n \"correlationId\" varchar(255),\n \"value\" varchar(50),\n PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )`,\n )\n await queryRunner.query(\n `CREATE TABLE \"StatusList\"\n (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK ( \"type\" IN ('StatusList2021') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK ( \"driverType\" IN ('agent_typeorm', 'agent_kv_store', 'github',\n 'agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK ( \"credentialIdMode\" IN ('ISSUANCE', 'PERSISTENCE', 'NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK ( \"proofFormat\" IN ('lds', 'jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK ( \"indexingDirection\" IN ('rightToLeft') ) NOT NULL DEFAULT ('rightToLeft'),\n \"statusPurpose\" varchar NOT NULL DEFAULT ('revocation'),\n \"statusListCredential\" text,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )`,\n )\n await queryRunner.query(\n `CREATE TABLE \"temporary_StatusListEntry\"\n (\n \"statusListId\" varchar NOT NULL,\n \"statusListIndex\" integer NOT NULL,\n \"credentialId\" varchar,\n \"credentialHash\" varchar(128),\n \"correlationId\" varchar(255),\n \"value\" varchar(50),\n CONSTRAINT \"FK_statusListEntry_statusListId\" FOREIGN KEY (\"statusListId\") REFERENCES \"StatusList\" (\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION,\n PRIMARY KEY (\"statusListId\", \"statusListIndex\")\n )`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_StatusListEntry\"(\"statusListId\", \"statusListIndex\", \"credentialId\",\n \"credentialHash\", \"correlationId\", \"value\")\n SELECT \"statusListId\", \"statusListIndex\", \"credentialId\", \"credentialHash\", \"correlationId\", \"value\"\n FROM \"StatusListEntry\"`,\n )\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusListEntry\" RENAME TO \"StatusListEntry\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"StatusListEntry\"`)\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class UpdateStatusList1737110469000 implements MigrationInterface {\n name = 'UpdateStatusList1737110469000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Create temporary table with new schema\n await queryRunner.query(\n `CREATE TABLE \"temporary_StatusList\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK( \"type\" IN ('StatusList2021', 'OAuthStatusList') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK( \"driverType\" IN ('agent_typeorm','agent_kv_store','github','agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK( \"credentialIdMode\" IN ('ISSUANCE','PERSISTENCE','NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK( \"proofFormat\" IN ('lds','jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK( \"indexingDirection\" IN ('rightToLeft') ),\n \"statusPurpose\" varchar,\n \"statusListCredential\" text,\n \"bitsPerStatus\" integer,\n \"expiresAt\" datetime,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )`,\n )\n\n // Copy data from old table to temporary table\n await queryRunner.query(\n `INSERT INTO \"temporary_StatusList\"(\n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\"\n )\n SELECT \n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\"\n FROM \"StatusList\"`,\n )\n\n // Drop old table and rename temporary table\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusList\" RENAME TO \"StatusList\"`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n ALTER TABLE \"StatusListEntry\"\n RENAME COLUMN \"entryCorrelationId\" TO \"correlationId\"\n `)\n\n await queryRunner.query(`\n ALTER TABLE \"StatusListEntry\"\n DROP COLUMN \"statusListCorrelationId\"\n `)\n\n // Create temporary table with old schema\n await queryRunner.query(\n `CREATE TABLE \"temporary_StatusList\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"correlationId\" varchar NOT NULL,\n \"length\" integer NOT NULL,\n \"issuer\" text NOT NULL,\n \"type\" varchar CHECK( \"type\" IN ('StatusList2021') ) NOT NULL DEFAULT ('StatusList2021'),\n \"driverType\" varchar CHECK( \"driverType\" IN ('agent_typeorm','agent_kv_store','github','agent_filesystem') ) NOT NULL DEFAULT ('agent_typeorm'),\n \"credentialIdMode\" varchar CHECK( \"credentialIdMode\" IN ('ISSUANCE','PERSISTENCE','NEVER') ) NOT NULL DEFAULT ('ISSUANCE'),\n \"proofFormat\" varchar CHECK( \"proofFormat\" IN ('lds','jwt') ) NOT NULL DEFAULT ('lds'),\n \"indexingDirection\" varchar CHECK( \"indexingDirection\" IN ('rightToLeft') ) NOT NULL DEFAULT ('rightToLeft'),\n \"statusPurpose\" varchar NOT NULL DEFAULT ('revocation'),\n \"statusListCredential\" text,\n CONSTRAINT \"UQ_correlationId\" UNIQUE (\"correlationId\")\n )`,\n )\n\n // Copy data back, excluding new columns\n await queryRunner.query(\n `INSERT INTO \"temporary_StatusList\"(\n \"id\", \"correlationId\", \"length\", \"issuer\", \"type\", \"driverType\",\n \"credentialIdMode\", \"proofFormat\", \"indexingDirection\", \"statusPurpose\",\n \"statusListCredential\"\n )\n SELECT \n \"id\", \"correlationId\", \"length\", \"issuer\", \n CASE WHEN \"type\" = 'OAuthStatusList' THEN 'StatusList2021' ELSE \"type\" END,\n \"driverType\", \"credentialIdMode\", \"proofFormat\", \"indexingDirection\",\n COALESCE(\"statusPurpose\", 'revocation'), \"statusListCredential\"\n FROM \"StatusList\"`,\n )\n\n // Drop new table and rename temporary table back\n await queryRunner.query(`DROP TABLE \"StatusList\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_StatusList\" RENAME TO \"StatusList\"`)\n }\n}\n","import Debug, { Debugger } from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateAuditEvents1701634812183 } from '../postgres/1701634812183-CreateAuditEvents'\nimport { CreateAuditEvents1701634819487 } from '../sqlite/1701634819487-CreateAuditEvents'\n\nconst debug: Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateAuditEvents1701635835330 implements MigrationInterface {\n name: string = 'CreateAuditEvents1701635835330'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating audit events tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateAuditEvents1701634812183 = new CreateAuditEvents1701634812183()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateAuditEvents1701634819487 = new CreateAuditEvents1701634819487()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting audit events tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateAuditEvents1701634812183 = new CreateAuditEvents1701634812183()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateAuditEvents1701634819487 = new CreateAuditEvents1701634819487()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateAuditEvents1701634812183 implements MigrationInterface {\n name = 'CreateAuditEvents1701634812183'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`CREATE TYPE \"public\".\"Level_enum\" AS ENUM('0', '1', '2', '3', '4')`)\n await queryRunner.query(\n `CREATE TYPE \"public\".\"System_enum\" AS ENUM('general', 'kms', 'identity', 'oid4vci', 'oid4vp', 'siopv2', 'PE', 'credentials', 'web3', 'profile', 'contact')`,\n )\n await queryRunner.query(\n `CREATE TYPE \"public\".\"Subsystem_type_enum\" AS ENUM('key', 'did_provider', 'did_resolver', 'oid4vp_op', 'oid4vci_client', 'siopv2_op', 'contact_manager', 'vc_issuer', 'vc_verifier', 'vc_persistence', 'transport', 'profile', 'api')`,\n )\n await queryRunner.query(`CREATE TYPE \"public\".\"Action_type_enum\" AS ENUM('create', 'read', 'update', 'delete', 'execute')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"Initiator_type_enum\" AS ENUM('user', 'system', 'external')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"System_correlation_id_type_enum\" AS ENUM('did', 'url', 'email', 'hostname', 'phone', 'user')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"Party_correlation_type_enum\" AS ENUM('did', 'url', 'email', 'hostname', 'phone')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"Event_type_enum\" AS ENUM('audit', 'activity', 'general')`)\n await queryRunner.query(`CREATE TYPE \"public\".\"Event_credential_type_enum\" AS ENUM('JSON_LD', 'JWT', 'SD_JWT', 'MSO_MDOC')`)\n await queryRunner.query(\n `CREATE TABLE \"AuditEvents\" (\n \"id\" uuid NOT NULL DEFAULT uuid_generate_v4(),\n \"eventType\" \"public\".\"Event_type_enum\" NOT NULL,\n \"timestamp\" TIMESTAMP NOT NULL, \n \"level\" \"public\".\"Level_enum\" NOT NULL, \n \"correlationId\" TEXT NOT NULL, \n \"system\" \"public\".\"System_enum\" NOT NULL, \n \"subSystemType\" \"public\".\"Subsystem_type_enum\" NOT NULL, \n \"actionType\" \"public\".\"Action_type_enum\" NOT NULL, \n \"actionSubType\" TEXT NOT NULL, \n \"initiatorType\" \"public\".\"Initiator_type_enum\" NOT NULL, \n \"systemCorrelationIdType\" \"public\".\"System_correlation_id_type_enum\", \n \"systemCorrelationId\" TEXT, \n \"systemAlias\" TEXT, \n \"partyCorrelationType\" \"public\".\"Party_correlation_type_enum\", \n \"partyCorrelationId\" TEXT, \n \"partyAlias\" TEXT, \n \"credentialType\" \"public\".\"Event_credential_type_enum\",\n \"credentialHash\" TEXT,\n \"originalCredential\" TEXT,\n \"sharePurpose\" TEXT,\n \"description\" TEXT NOT NULL, \n \"data\" TEXT, \n \"diagnosticData\" TEXT, \n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(), \n \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(), \n CONSTRAINT \"PK_AuditEvents_id\" PRIMARY KEY (\"id\"))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"AuditEvents\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Party_correlation_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"System_correlation_id_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Initiator_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Action_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Subsystem_type_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"System_enum\"`)\n await queryRunner.query(`DROP TYPE \"public\".\"Level_enum\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateAuditEvents1701634819487 implements MigrationInterface {\n name = 'CreateAuditEvents1701634819487'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(\n `CREATE TABLE \"AuditEvents\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"eventType\" varchar CHECK( \"eventType\" IN ('audit','activity','general') ) NOT NULL,\n \"timestamp\" datetime NOT NULL, \n \"level\" varchar CHECK( \"level\" IN ('0','1','2','3','4') ) NOT NULL, \n \"correlationId\" varchar NOT NULL, \n \"system\" varchar CHECK( \"system\" IN ('general','kms','identity','oid4vci','oid4vp','siopv2','PE','credentials','web3','profile','contact') ) NOT NULL, \n \"subSystemType\" varchar CHECK( \"subSystemType\" IN ('key','did_provider','did_resolver','oid4vp_op','oid4vci_client','siopv2_op','contact_manager','vc_issuer','vc_verifier','vc_persistence','transport','profile','api') ) NOT NULL, \n \"actionType\" varchar CHECK( \"actionType\" IN ('create','read','update','delete','execute') ) NOT NULL, \n \"actionSubType\" varchar NOT NULL, \n \"initiatorType\" varchar CHECK( \"initiatorType\" IN ('user','system','external') ) NOT NULL, \n \"systemCorrelationIdType\" varchar CHECK( \"systemCorrelationIdType\" IN ('did','url','email','hostname','phone','user') ), \n \"systemCorrelationId\" varchar, \n \"systemAlias\" varchar, \n \"partyCorrelationType\" varchar CHECK( \"partyCorrelationType\" IN ('did','url','email','hostname','phone') ), \n \"partyCorrelationId\" varchar, \n \"partyAlias\" varchar,\n \"credentialType\" varchar CHECK( \"credentialType\" IN ('JSON_LD','JWT','SD_JWT','MSO_MDOC') ),\n \"credentialHash\" varchar,\n \"parentCredentialHash\" varchar,\n \"originalCredential\" varchar,\n \"sharePurpose\" varchar,\n \"description\" varchar NOT NULL, \n \"data\" varchar, \n \"diagnosticData\" varchar, \n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')), \n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')))`,\n )\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"AuditEvents\"`)\n }\n}\n","import Debug, { Debugger } from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateDigitalCredential1708525189001 } from '../postgres/1708525189001-CreateDigitalCredential'\nimport { CreateDigitalCredential1708525189002 } from '../sqlite/1708525189002-CreateDigitalCredential'\n\nconst debug: Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateDigitalCredential1708525189000 implements MigrationInterface {\n name: string = 'CreateDigitalCredential1708525189000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating DigitalCredential tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file for DigitalCredential')\n const mig: CreateDigitalCredential1708525189001 = new CreateDigitalCredential1708525189001()\n await mig.up(queryRunner)\n debug('Postgres Migration statements for DigitalCredential executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file for DigitalCredential')\n const mig: CreateDigitalCredential1708525189002 = new CreateDigitalCredential1708525189002()\n await mig.up(queryRunner)\n debug('SQLite Migration statements for DigitalCredential executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo, and postgres for UniformCredential. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting DigitalCredential tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file for DigitalCredential')\n const mig: CreateDigitalCredential1708525189001 = new CreateDigitalCredential1708525189001()\n await mig.down(queryRunner)\n debug('Postgres Migration statements for DigitalCredential reverted')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file for DigitalCredential')\n const mig: CreateDigitalCredential1708525189002 = new CreateDigitalCredential1708525189002()\n await mig.down(queryRunner)\n debug('SQLite Migration statements for DigitalCredential reverted')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo, and postgres for DigitalCredential. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateDigitalCredential1708525189001 implements MigrationInterface {\n name = 'CreateDigitalCredential1708525189001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`CREATE TYPE \"digital_document_type\" AS ENUM('VC', 'VP', 'C', 'P')`)\n await queryRunner.query(`CREATE TYPE \"digital_regulation_type\" AS ENUM('PID', 'QEAA', 'EAA', 'NON_REGULATED')`)\n await queryRunner.query(`CREATE TYPE \"digital_credential_document_format\" AS ENUM('JSON_LD', 'JWT', 'SD_JWT', 'MSO_MDOC')`)\n await queryRunner.query(`CREATE TYPE \"digital_credential_credential_role\" AS ENUM('ISSUER', 'VERIFIER', 'HOLDER', 'FEDERATION_TRUST_ANCHOR')`)\n await queryRunner.query(`CREATE TYPE \"digital_credential_correlation_type\" AS ENUM('DID', 'KID', 'URL', 'X509_SAN')`)\n await queryRunner.query(`CREATE TYPE \"digital_credential_state_type\" AS ENUM('REVOKED', 'VERIFIED', 'EXPIRED')`)\n\n // TODO FK for parent\n\n await queryRunner.query(`\n CREATE TABLE \"DigitalCredential\" (\n \"id\" uuid NOT NULL DEFAULT uuid_generate_v4(),\n \"parent_id\" text,\n \"document_type\" \"digital_document_type\" NOT NULL,\n \"regulation_type\" \"digital_regulation_type\" NOT NULL DEFAULT 'NON_REGULATED'::\"digital_regulation_type\",\n \"document_format\" \"digital_credential_document_format\" NOT NULL,\n \"credential_role\" \"digital_credential_credential_role\" NOT NULL,\n \"raw_document\" text NOT NULL,\n \"uniform_document\" text NOT NULL,\n \"credential_id\" text,\n \"hash\" text NOT NULL,\n \"kms_key_ref\" text,\n \"identifier_method\" text,\n \"issuer_correlation_type\" \"digital_credential_correlation_type\" NOT NULL,\n \"subject_correlation_type\" \"digital_credential_correlation_type\",\n \"issuer_correlation_id\" text NOT NULL,\n \"subject_correlation_id\" text,\n \"verified_state\" \"digital_credential_state_type\",\n \"issuer_signed\" boolean,\n \"rp_correlation_id\" text,\n \"rp_correlation_type\" \"digital_credential_correlation_type\",\n \"tenant_id\" text,\n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"last_updated_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"presented_at\" DATE,\n \"valid_from\" DATE,\n \"valid_until\" DATE,\n \"verified_at\" DATE,\n \"revoked_at\" DATE,\n PRIMARY KEY (\"id\"),\n UNIQUE (\"hash\", \"credential_role\")\n )\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"DigitalCredential\"`)\n await queryRunner.query(`DROP TYPE \"digital_credential_state_type\"`)\n await queryRunner.query(`DROP TYPE \"digital_credential_correlation_type\"`)\n await queryRunner.query(`DROP TYPE \"digital_credential_document_format\"`)\n await queryRunner.query(`DROP TYPE \"digital_credential_credential_role\"`)\n await queryRunner.query(`DROP TYPE \"digital_regulation_type\"`)\n await queryRunner.query(`DROP TYPE \"digital_document_type\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateDigitalCredential1708525189002 implements MigrationInterface {\n name = 'CreateDigitalCredential1708525189002'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // TODO FK for parent\n await queryRunner.query(`\n CREATE TABLE \"DigitalCredential\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"parent_id\" text, \n \"document_type\" varchar CHECK( \"document_type\" IN ('VC', 'VP', 'C', 'P') ) NOT NULL,\n \"regulation_type\" varchar CHECK( \"regulation_type\" IN ('PID', 'QEAA', 'EAA', 'NON_REGULATED') ) NOT NULL DEFAULT 'NON_REGULATED',\n \"document_format\" varchar CHECK( \"document_format\" IN ('JSON_LD', 'JWT', 'SD_JWT', 'MSO_MDOC') ) NOT NULL,\n \"credential_role\" varchar CHECK( \"credential_role\" IN ('ISSUER', 'VERIFIER', 'HOLDER', 'FEDERATION_TRUST_ANCHOR') ) NOT NULL,\n \"raw_document\" text NOT NULL,\n \"uniform_document\" text NOT NULL,\n \"credential_id\" text,\n \"hash\" text NOT NULL,\n \"kms_key_ref\" text,\n \"identifier_method\" text,\n \"issuer_correlation_type\" varchar CHECK( \"issuer_correlation_type\" IN ('DID', 'KID', 'URL', 'X509_SAN') ) NOT NULL,\n \"subject_correlation_type\" varchar CHECK( \"subject_correlation_type\" IN ('DID', 'KID', 'URL', 'X509_SAN') ),\n \"issuer_correlation_id\" text NOT NULL,\n \"subject_correlation_id\" text,\n \"issuer_signed\" boolean,\n \"rp_correlation_id\" text,\n \"rp_correlation_type\" varchar CHECK( \"issuer_correlation_type\" IN ('DID', 'KID', 'URL', 'X509_SAN') ),\n \"verified_state\" varchar CHECK( \"verified_state\" IN ('REVOKED', 'VERIFIED', 'EXPIRED') ),\n \"tenant_id\" text,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"presented_at\" datetime,\n \"valid_from\" datetime,\n \"valid_until\" datetime,\n \"verified_at\" datetime,\n \"revoked_at\" datetime,\n UNIQUE (\"hash\", \"credential_role\")\n )\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"DigitalCredential\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateMachineStateStore1708797018115 } from '../postgres/1708797018115-CreateMachineStateStore'\nimport { CreateMachineStateStore1708796002272 } from '../sqlite/1708796002272-CreateMachineStateStore'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateMachineStateStore1708098041262 implements MigrationInterface {\n name = 'CreateMachineStateStore1708098041262'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: creating machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateMachineStateStore1708797018115 = new CreateMachineStateStore1708797018115()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateMachineStateStore1708796002272 = new CreateMachineStateStore1708796002272()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateMachineStateStore1708797018115 = new CreateMachineStateStore1708797018115()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateMachineStateStore1708796002272 = new CreateMachineStateStore1708796002272()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateMachineStateStore1708797018115 implements MigrationInterface {\n name = 'CreateMachineStateStore1708797018115'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"MachineStateInfoEntity\" (\n \"instance_id\" text NOT NULL,\n \"session_id\" text,\n \"latest_state_name\" text,\n \"machine_name\" text NOT NULL,\n \"latest_event_type\" text NOT NULL,\n \"state\" text NOT NULL,\n \"created_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT now(),\n \"updated_count\" integer NOT NULL DEFAULT 0,\n \"expires_at\" TIMESTAMP,\n \"completed_at\" TIMESTAMP,\n \"tenant_id\" text,\n CONSTRAINT \"PK_MachineStateInfoEntity_id\" PRIMARY KEY (\"instance_id\")\n )\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"MachineStateInfoEntity\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateMachineStateStore1708796002272 implements MigrationInterface {\n name = 'CreateMachineStateStore1708796002272'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`\n CREATE TABLE \"MachineStateInfoEntity\" (\n \"instance_id\" varchar PRIMARY KEY NOT NULL,\n \"session_id\" varchar,\n \"machine_name\" varchar NOT NULL,\n \"latest_state_name\" varchar,\n \"latest_event_type\" varchar NOT NULL,\n \"state\" text NOT NULL,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"updated_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"updated_count\" integer NOT NULL DEFAULT 0,\n \"expires_at\" datetime,\n \"completed_at\" datetime,\n \"tenant_id\" varchar\n )\n `)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`DROP TABLE \"MachineStateInfoEntity\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateContacts1710438363001 } from '../postgres/1710438363001-CreateContacts'\nimport { CreateContacts1710438363002 } from '../sqlite/1710438363002-CreateContacts'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateContacts1708525189000 implements MigrationInterface {\n name = 'CreateContacts1708525189000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: updating contact tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1710438363001 = new CreateContacts1710438363001()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1710438363002 = new CreateContacts1710438363002()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1710438363001 = new CreateContacts1710438363001()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1710438363002 = new CreateContacts1710438363002()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1710438363001 implements MigrationInterface {\n name = 'CreateContacts1710438363001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"Party\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"Party\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"Identity\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"Connection\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"Connection\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"BaseContact\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" ADD COLUMN \"tenant_id\" uuid`)\n\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" ADD COLUMN \"owner_id\" uuid`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" ADD COLUMN \"tenant_id\" uuid`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Party\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Party\" DROP COLUMN \"owner_id\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1710438363002 implements MigrationInterface {\n name = 'CreateContacts1710438363002'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"Party\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"Party\" ADD COLUMN \"tenant_id\" text`)\n\n // Add owner_id, tenant_id & origin\n await queryRunner.query(\n `CREATE TABLE \"temporary_Identity\" (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"alias\" varchar(255) NOT NULL,\n \"roles\" text NOT NULL,\n \"origin\" text NOT NULL,\n \"created_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"last_updated_at\" datetime NOT NULL DEFAULT (datetime('now')),\n \"partyId\" varchar,\n \"owner_id\" text,\n \"tenant_id\" text,\n CONSTRAINT \"UQ_Identity_alias\" UNIQUE (\"alias\"),\n CONSTRAINT \"FK_Identity_partyId\" FOREIGN KEY (\"partyId\") REFERENCES \"Party\" (\"id\") ON DELETE CASCADE ON UPDATE NO ACTION\n )`,\n )\n await queryRunner.query(\n `INSERT INTO \"temporary_Identity\"(\"id\", \"alias\", \"roles\", \"created_at\", \"last_updated_at\", \"partyId\", \"owner_id\", \"tenant_id\", \"origin\")\n SELECT \"id\", \"alias\", \"roles\", 'EXTERNAL' as \"origin\", \"created_at\", \"last_updated_at\", \"partyId\", NULL as \"owner_id\", NULL as \"tenant_id\" FROM \"Identity\"`,\n )\n await queryRunner.query(`DROP TABLE \"Identity\"`)\n await queryRunner.query(`ALTER TABLE \"temporary_Identity\" RENAME TO \"Identity\"`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"Connection\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"Connection\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"BaseContact\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" ADD COLUMN \"tenant_id\" text`)\n\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" ADD COLUMN \"owner_id\" text`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" ADD COLUMN \"tenant_id\" text`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"PhysicalAddress\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"ElectronicAddress\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"PartyRelationship\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseContact\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"BaseConfig\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Connection\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"CorrelationIdentifier\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Identity\" DROP COLUMN \"owner_id\"`)\n\n await queryRunner.query(`ALTER TABLE \"Party\" DROP COLUMN \"tenant_id\"`)\n await queryRunner.query(`ALTER TABLE \"Party\" DROP COLUMN \"owner_id\"`)\n }\n}\n","import Debug from 'debug'\nimport { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'\nimport { CreateContacts1715761125001 } from '../postgres/1715761125001-CreateContacts'\nimport { CreateContacts1715761125002 } from '../sqlite/1715761125002-CreateContacts'\n\nconst debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')\n\nexport class CreateContacts1715761125000 implements MigrationInterface {\n name = 'CreateContacts1715761125000'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n debug('migration: updating contact tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1715761125001 = new CreateContacts1715761125001()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1715761125002 = new CreateContacts1715761125002()\n await mig.up(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n debug('migration: reverting machine state tables')\n const dbType: DatabaseType = queryRunner.connection.driver.options.type\n\n switch (dbType) {\n case 'postgres': {\n debug('using postgres migration file')\n const mig: CreateContacts1715761125001 = new CreateContacts1715761125001()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n case 'sqlite':\n case 'expo':\n case 'react-native': {\n debug('using sqlite/react-native migration file')\n const mig: CreateContacts1715761125002 = new CreateContacts1715761125002()\n await mig.down(queryRunner)\n debug('Migration statements executed')\n return\n }\n default:\n return Promise.reject(\n `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,\n )\n }\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1715761125001 implements MigrationInterface {\n name = 'CreateContacts1715761125001'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Upgrade IdentityMetadata table\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`CREATE TABLE \"IdentityMetadata\"\n (\n \"id\" uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),\n \"label\" character varying(255) NOT NULL,\n \"valueType\" character varying NOT NULL,\n \"stringValue\" text,\n \"numberValue\" double precision,\n \"dateValue\" TIMESTAMP,\n \"boolValue\" boolean,\n \"identityId\" uuid,\n CONSTRAINT \"FK_Identity_IdentityMetadata\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE\n )`)\n await queryRunner.query(`INSERT INTO \"IdentityMetadata\" (\"id\", \"label\", \"valueType\", \"stringValue\", \"identityId\")\n SELECT \"id\", \"label\", 'string', \"value\", \"identityId\"\n FROM \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n\n // Create new ContactMetadata table\n await queryRunner.query(`CREATE TABLE \"ContactMetadata\"\n (\n \"id\" uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),\n \"label\" character varying(255) NOT NULL,\n \"valueType\" character varying NOT NULL,\n \"stringValue\" text,\n \"numberValue\" double precision,\n \"dateValue\" TIMESTAMP,\n \"boolValue\" boolean,\n \"contactId\" uuid,\n CONSTRAINT \"FK_BaseContact_ContactMetadata\" FOREIGN KEY (\"contactId\") REFERENCES \"BaseContact\" (\"id\") ON DELETE CASCADE\n )`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Drop the ContactMetadata table\n await queryRunner.query(`DROP TABLE \"ContactMetadata\"`)\n\n // Restore the IdentityMetadata table\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`CREATE TABLE \"IdentityMetadata\"\n (\n \"id\" uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),\n \"label\" character varying(255) NOT NULL,\n \"value\" character varying(255) NOT NULL,\n \"identityId\" uuid,\n CONSTRAINT \"FK_Identity_IdentityMetadata\" FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE\n )`)\n await queryRunner.query(`INSERT INTO \"IdentityMetadata\" (\"id\", \"label\", \"value\", \"identityId\")\n SELECT \"id\", \"label\", \"stringValue\", \"identityId\"\n FROM \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n }\n}\n","import { MigrationInterface, QueryRunner } from 'typeorm'\n\nexport class CreateContacts1715761125002 implements MigrationInterface {\n name = 'CreateContacts1715761125002'\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n // Upgrade IdentityMetadata table\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`CREATE TABLE \"IdentityMetadata\"\n (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"label\" varchar(255) NOT NULL,\n \"valueType\" varchar NOT NULL,\n \"stringValue\" varchar(255),\n \"numberValue\" double,\n \"dateValue\" datetime,\n \"boolValue\" boolean,\n \"identityId\" varchar,\n FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE)`)\n await queryRunner.query(`INSERT INTO \"IdentityMetadata\" (\"id\", \"label\", \"valueType\", \"stringValue\", \"identityId\")\n SELECT \"id\", \"label\", 'string', \"value\", \"identityId\"\n FROM \"temporary_IdentityMetadata\"\n `)\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n\n // Create new ContactMetadata table\n await queryRunner.query(`CREATE TABLE \"ContactMetadata\"\n (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"label\" varchar(255) NOT NULL,\n \"valueType\" varchar NOT NULL,\n \"stringValue\" text,\n \"numberValue\" double,\n \"dateValue\" datetime,\n \"boolValue\" boolean,\n \"contactId\" varchar,\n FOREIGN KEY (\"contactId\") REFERENCES \"BaseContact\" (\"id\") ON DELETE CASCADE)`)\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n // Drop the ContactMetadata table\n await queryRunner.query(`DROP TABLE \"ContactMetadata\"`)\n\n // Restore the IdentityMetadata table\n await queryRunner.query(`ALTER TABLE \"IdentityMetadata\" RENAME TO \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`CREATE TABLE \"IdentityMetadata\"\n (\n \"id\" varchar PRIMARY KEY NOT NULL,\n \"label\" varchar(255) NOT NULL,\n \"value\" varchar(255) NOT NULL,\n \"identityId\" varchar,\n FOREIGN KEY (\"identityId\") REFERENCES \"Identity\" (\"id\") ON DELETE CASCADE\n )`)\n await queryRunner.query(`INSERT INTO \"IdentityMetadata\" (\"id\", \"label\", \"value\", \"identityId\")\n SELECT \"id\", \"label\", \"stringValue\", \"identityId\"\n FROM \"temporary_IdentityMetadata\"`)\n await queryRunner.query(`DROP TABLE \"temporary_IdentityMetadata\"`)\n }\n}\n","import { CreateContacts1659463079429 } from './1-CreateContacts'\nimport { CreatePresentationDefinitions1716533767523 } from './10-CreatePresentationDefinitions'\nimport { FixCredentialClaimsReferencesUuid1741895822987 } from './11-FixCredentialClaimsReferenceUuid'\nimport { AddBitstringStatusListEnum1741895823000, CreateBitstringStatusList1741895823000 } from './12-CreateBitstringStatusList'\nimport { CreateDcqlQueryItem1726617600000 } from './13-CreateDcqlQueryItem'\nimport { AddLinkedVpFields1763387280000 } from './14-AddLinkedVpFields'\nimport { CreateIssuanceBranding1659463079429 } from './2-CreateIssuanceBranding'\nimport { CreateContacts1690925872318 } from './3-CreateContacts'\nimport { CreateStatusList1693866470000 } from './4-CreateStatusList'\nimport { CreateAuditEvents1701635835330 } from './5-CreateAuditEvents'\nimport { CreateDigitalCredential1708525189000 } from './6-CreateDigitalCredential'\nimport { CreateMachineStateStore1708098041262 } from './7-CreateMachineStateStore'\nimport { CreateContacts1708525189000 } from './8-CreateContacts'\nimport { CreateContacts1715761125000 } from './9-CreateContacts'\n\n/**\n * The migrations array that SHOULD be used when initializing a TypeORM database connection.\n *\n * These ensure the correct creation of tables and the proper migrations of data when tables change between versions.\n *\n * @public\n */\n\n// Individual migrations per purpose. Allows parties to not run migrations and thus create/update tables if they are not using a particular feature (yet)\nexport const DataStoreContactMigrations = [\n CreateContacts1659463079429,\n CreateContacts1690925872318,\n CreateContacts1708525189000,\n CreateContacts1715761125000,\n]\nexport const DataStoreIssuanceBrandingMigrations = [CreateIssuanceBranding1659463079429, FixCredentialClaimsReferencesUuid1741895822987]\nexport const DataStoreStatusListMigrations = [\n CreateStatusList1693866470000,\n AddBitstringStatusListEnum1741895823000,\n CreateBitstringStatusList1741895823000,\n]\nexport const DataStoreEventLoggerMigrations = [CreateAuditEvents1701635835330]\nexport const DataStoreDigitalCredentialMigrations = [CreateDigitalCredential1708525189000, AddLinkedVpFields1763387280000]\nexport const DataStoreMachineStateMigrations = [CreateMachineStateStore1708098041262]\nexport const DataStorePresentationDefinitionMigrations = [CreatePresentationDefinitions1716533767523, CreateDcqlQueryItem1726617600000]\n\n// All migrations together\nexport const DataStoreMigrations = [\n ...DataStoreContactMigrations,\n ...DataStoreIssuanceBrandingMigrations,\n ...DataStoreStatusListMigrations,\n ...DataStoreEventLoggerMigrations,\n ...DataStoreDigitalCredentialMigrations,\n ...DataStoreMachineStateMigrations,\n ...DataStorePresentationDefinitionMigrations,\n]\n","import { defaultHasher } from '@sphereon/ssi-sdk.core'\nimport type {\n AddCredentialArgs,\n DigitalCredential,\n NonPersistedDigitalCredential,\n UpdateCredentialStateArgs,\n} from '@sphereon/ssi-sdk.data-store-types'\nimport { CredentialDocumentFormat, CredentialStateType, DocumentType, RegulationType } from '@sphereon/ssi-sdk.data-store-types'\nimport {\n CredentialMapper,\n DocumentFormat,\n type IVerifiableCredential,\n type IVerifiablePresentation,\n ObjectUtils,\n type OriginalVerifiableCredential,\n type OriginalVerifiablePresentation,\n type SdJwtDecodedVerifiableCredentialPayload,\n} from '@sphereon/ssi-types'\nimport { computeEntryHash } from '@veramo/utils'\nimport { DigitalCredentialEntity } from '../../entities/digitalCredential/DigitalCredentialEntity'\nimport { replaceNullWithUndefined } from '../FormattingUtils'\n\nfunction determineDocumentType(raw: string): DocumentType {\n const rawDocument = parseRawDocument(raw)\n if (!rawDocument) {\n throw new Error(`Couldn't parse the credential: ${raw}`)\n }\n\n const hasProof = CredentialMapper.hasProof(rawDocument)\n const isCredential = isHex(raw) || ObjectUtils.isBase64(raw) || CredentialMapper.isCredential(rawDocument)\n const isPresentation = CredentialMapper.isPresentation(rawDocument)\n\n if (isCredential) {\n return hasProof || isHex(raw) || ObjectUtils.isBase64(raw) ? DocumentType.VC : DocumentType.C\n } else if (isPresentation) {\n return hasProof ? DocumentType.VP : DocumentType.P\n }\n throw new Error(`Couldn't determine the type of the credential: ${raw}`)\n}\n\nexport function isHex(input: string) {\n return input.match(/^([0-9A-Fa-f])+$/g) !== null\n}\n\nexport function parseRawDocument(raw: string): OriginalVerifiableCredential | OriginalVerifiablePresentation {\n if (isHex(raw) || ObjectUtils.isBase64(raw)) {\n // mso_mdoc\n return raw\n } else if (CredentialMapper.isJwtEncoded(raw) || CredentialMapper.isSdJwtEncoded(raw)) {\n return raw\n }\n try {\n return JSON.parse(raw)\n } catch (e) {\n throw new Error(`Can't parse the raw credential: ${raw}`)\n }\n}\n\nfunction determineCredentialDocumentFormat(documentFormat: DocumentFormat): CredentialDocumentFormat {\n switch (documentFormat) {\n case DocumentFormat.JSONLD:\n return CredentialDocumentFormat.JSON_LD\n case DocumentFormat.JWT:\n return CredentialDocumentFormat.JWT\n case DocumentFormat.SD_JWT_VC:\n return CredentialDocumentFormat.SD_JWT\n case DocumentFormat.MSO_MDOC:\n return CredentialDocumentFormat.MSO_MDOC\n default:\n throw new Error(`Not supported document format: ${documentFormat}`)\n }\n}\n\n/**\n * Normalizes nullable fields by converting undefined to null.\n * This ensures TypeORM actually clears the database fields instead of ignoring them.\n */\nexport function normalizeNullableFields<T extends Record<string, any>>(obj: T, nullableKeys: Array<keyof T>): T {\n const normalized = { ...obj }\n for (const key of nullableKeys) {\n if (normalized[key] === undefined) {\n normalized[key] = null as any\n }\n }\n return normalized\n}\n\nfunction getValidUntil(uniformDocument: IVerifiableCredential | IVerifiablePresentation | SdJwtDecodedVerifiableCredentialPayload): Date | undefined {\n if ('expirationDate' in uniformDocument && uniformDocument.expirationDate) {\n return new Date(uniformDocument.expirationDate)\n } else if ('validUntil' in uniformDocument && uniformDocument.validUntil) {\n return new Date(uniformDocument.validUntil)\n } else if ('exp' in uniformDocument && uniformDocument.exp) {\n return new Date(uniformDocument.exp * 1000)\n }\n return undefined\n}\n\nfunction getValidFrom(uniformDocument: IVerifiableCredential | IVerifiablePresentation | SdJwtDecodedVerifiableCredentialPayload): Date | undefined {\n if ('issuanceDate' in uniformDocument && uniformDocument.issuanceDate) {\n return new Date(uniformDocument.issuanceDate)\n } else if ('validFrom' in uniformDocument && uniformDocument.validFrom) {\n return new Date(uniformDocument['validFrom'])\n } else if ('nbf' in uniformDocument && uniformDocument.nbf) {\n return new Date(uniformDocument['nbf'] * 1000)\n } else if ('iat' in uniformDocument && uniformDocument.iat) {\n return new Date(uniformDocument['iat'] * 1000)\n }\n return undefined\n}\n\nconst safeStringify = (object: any): string => {\n if (typeof object === 'string') {\n return object\n }\n return JSON.stringify(object)\n}\n\nexport const nonPersistedDigitalCredentialEntityFromAddArgs = (addCredentialArgs: AddCredentialArgs): NonPersistedDigitalCredential => {\n const documentType: DocumentType = determineDocumentType(addCredentialArgs.rawDocument)\n const documentFormat: DocumentFormat = CredentialMapper.detectDocumentType(addCredentialArgs.rawDocument)\n const hasher = addCredentialArgs?.opts?.hasher ?? defaultHasher\n if (documentFormat === DocumentFormat.SD_JWT_VC && !addCredentialArgs.opts?.hasher) {\n throw new Error('No hasher function is provided for SD_JWT credential.')\n }\n const uniformDocument =\n documentType === DocumentType.VC || documentType === DocumentType.C\n ? CredentialMapper.toUniformCredential(addCredentialArgs.rawDocument, { hasher })\n : CredentialMapper.toUniformPresentation(addCredentialArgs.rawDocument, { hasher })\n const validFrom: Date | undefined = getValidFrom(uniformDocument)\n const validUntil: Date | undefined = getValidUntil(uniformDocument)\n const hash = computeEntryHash(addCredentialArgs.rawDocument)\n const regulationType = addCredentialArgs.regulationType ?? RegulationType.NON_REGULATED\n return {\n ...addCredentialArgs,\n regulationType,\n documentType,\n documentFormat: determineCredentialDocumentFormat(documentFormat),\n createdAt: new Date(),\n credentialId: uniformDocument.id ?? hash,\n hash,\n uniformDocument: safeStringify(uniformDocument),\n validFrom,\n ...(validUntil && { validUntil }),\n lastUpdatedAt: new Date(),\n }\n}\n\nexport const persistedDigitalCredentialEntityFromUpdateArgs = (\n existingCredential: DigitalCredentialEntity,\n updates: Partial<DigitalCredential>,\n): DigitalCredentialEntity => {\n const entity = new DigitalCredentialEntity()\n\n // Copy all fields from existing credential\n Object.assign(entity, existingCredential)\n\n // Normalize nullable fields before applying updates\n const normalizedUpdates = normalizeNullableFields(updates, ['linkedVpId', 'linkedVpFrom', 'linkedVpUntil'])\n\n // Apply updates\n Object.assign(entity, normalizedUpdates)\n\n // Ensure these fields are never overwritten\n entity.id = existingCredential.id\n entity.hash = existingCredential.hash\n entity.createdAt = existingCredential.createdAt\n entity.lastUpdatedAt = new Date()\n\n return entity\n}\n\nexport const persistedDigitalCredentialEntityFromStateArgs = (\n existingCredential: DigitalCredentialEntity,\n args: UpdateCredentialStateArgs,\n): DigitalCredentialEntity => {\n const entity = new DigitalCredentialEntity()\n\n // Copy all fields from existing credential\n Object.assign(entity, existingCredential)\n\n // Apply state updates\n entity.verifiedState = args.verifiedState\n entity.lastUpdatedAt = new Date()\n\n if (args.verifiedState === CredentialStateType.REVOKED && args.revokedAt) {\n entity.revokedAt = args.revokedAt\n }\n\n if (args.verifiedState !== CredentialStateType.REVOKED && args.verifiedAt) {\n entity.verifiedAt = args.verifiedAt\n }\n\n return entity\n}\n\nexport const digitalCredentialFrom = (credentialEntity: DigitalCredentialEntity): DigitalCredential => {\n const result: DigitalCredential = {\n ...credentialEntity,\n }\n\n return replaceNullWithUndefined(result)\n}\n\nexport const digitalCredentialsFrom = (credentialEntities: Array<DigitalCredentialEntity>): DigitalCredential[] => {\n return credentialEntities.map((credentialEntity) => digitalCredentialFrom(credentialEntity))\n}\n"],"mappings":"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","names":["BaseEntity","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","TableInheritance","ConnectionType","BaseEntity","Column","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","typeOrmDateTime","IdentityOrigin","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","JoinColumn","ManyToOne","OneToMany","OneToOne","PrimaryGeneratedColumn","UpdateDateColumn","getConstraint","validation","children","length","constraints","CorrelationIdentifierType","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","CorrelationIdentifierEntity","BaseEntity","id","type","correlationId","ownerId","tenantId","identity","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","enum","CorrelationIdentifierType","nullable","unique","IdentityEntity","identifier","onDelete","typeOrmDateTime","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","ManyToOne","PrimaryGeneratedColumn","IdentityMetadataItemEntity","BaseEntity","id","label","valueType","stringValue","numberValue","dateValue","boolValue","identity","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","type","typeOrmDateTime","IdentityEntity","metadata","cascade","onDelete","typeOrmDateTime","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","JoinColumn","ManyToOne","OneToMany","OneToOne","PrimaryGeneratedColumn","UpdateDateColumn","typeOrmDateTime","BaseEntity","BeforeInsert","BeforeUpdate","CreateDateColumn","Entity","JoinColumn","OneToMany","OneToOne","PrimaryGeneratedColumn","TableInheritance","UpdateDateColumn","typeOrmDateTime","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","ManyToOne","PrimaryGeneratedColumn","ContactMetadataItemEntity","BaseEntity","id","label","valueType","stringValue","numberValue","dateValue","boolValue","contact","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","type","typeOrmDateTime","BaseContactEntity","metadata","cascade","onDelete","BaseContactEntity","BaseEntity","id","createdAt","lastUpdatedAt","party","metadata","updateUpdatedDate","Date","name","nullable","type","typeOrmDateTime","PartyEntity","contact","onDelete","ContactMetadataItemEntity","cascade","eager","column","typeOrmDateTime","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","ManyToOne","PrimaryGeneratedColumn","UpdateDateColumn","ElectronicAddressEntity","BaseEntity","id","type","electronicAddress","party","partyId","ownerId","tenantId","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","PartyEntity","electronicAddresses","onDelete","typeOrmDateTime","typeOrmDateTime","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","JoinColumn","ManyToOne","PrimaryGeneratedColumn","UpdateDateColumn","PartyRelationshipEntity","id","left","leftId","right","rightId","ownerId","tenantId","createdAt","lastUpdatedAt","updateUpdatedDate","Date","checkRelationshipSides","Promise","reject","Error","PartyEntity","nullable","onDelete","name","type","typeOrmDateTime","unique","typeOrmDateTime","PartyOrigin","PartyTypeType","IsNotEmpty","Validate","validate","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","OneToMany","PrimaryGeneratedColumn","UpdateDateColumn","ValidatorConstraint","IsNonEmptyStringConstraint","validate","value","args","isEmptyString","defaultMessage","property","name","async","trim","length","PartyTypeEntity","id","type","origin","name","description","tenantId","parties","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","enum","PartyTypeType","nullable","PartyOrigin","unique","PartyEntity","party","partyType","typeOrmDateTime","typeOrmDateTime","IsNotEmpty","Validate","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","ManyToOne","PrimaryGeneratedColumn","UpdateDateColumn","PhysicalAddressEntity","BaseEntity","id","type","streetName","streetNumber","postalCode","cityName","provinceName","countryCode","buildingName","ownerId","tenantId","party","partyId","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","PartyEntity","physicalAddresses","onDelete","typeOrmDateTime","PartyEntity","BaseEntity","id","uri","ownerId","tenantId","identities","electronicAddresses","physicalAddresses","partyType","contact","relationships","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","IdentityEntity","identity","party","cascade","onDelete","eager","ElectronicAddressEntity","electronicAddress","PhysicalAddressEntity","physicalAddress","PartyTypeEntity","contactType","parties","BaseContactEntity","PartyRelationshipEntity","relationship","left","type","typeOrmDateTime","IdentityEntity","BaseEntity","id","alias","origin","ownerId","tenantId","roles","identifier","connection","metadata","createdAt","lastUpdatedAt","party","partyId","updateUpdatedDate","Date","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","unique","enum","IdentityOrigin","CorrelationIdentifierEntity","identity","cascade","onDelete","eager","ConnectionEntity","IdentityMetadataItemEntity","type","typeOrmDateTime","PartyEntity","identities","ConnectionEntity","BaseEntity","id","type","tenantId","ownerId","config","identity","name","enum","ConnectionType","nullable","BaseConfigEntity","connection","cascade","onDelete","eager","IdentityEntity","BaseConfigEntity","BaseEntity","id","connection","ConnectionEntity","config","cascade","onDelete","name","column","type","ChildEntity","Column","DidAuthConfigEntity","BaseConfigEntity","identifier","redirectUrl","sessionId","ownerId","tenantId","name","length","nullable","IsNotEmpty","validate","Validate","BeforeInsert","BeforeUpdate","ChildEntity","Column","NaturalPersonEntity","BaseContactEntity","firstName","middleName","lastName","displayName","ownerId","tenantId","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","unique","ChildEntity","Column","OpenIdConfigEntity","BaseConfigEntity","clientId","clientSecret","scopes","issuer","redirectUrl","dangerouslyAllowInsecureHttpRequests","clientAuthMethod","ownerId","tenantId","name","length","nullable","IsNotEmpty","validate","BeforeInsert","BeforeUpdate","ChildEntity","Column","OrganizationEntity","BaseContactEntity","legalName","displayName","ownerId","tenantId","validate","validation","length","constraint","getConstraint","message","Object","values","Promise","reject","Error","name","nullable","unique","typeormDate","typeOrmDateTime","CredentialCorrelationType","CredentialDocumentFormat","CredentialStateType","DocumentType","RegulationType","CredentialRole","BaseEntity","Column","CreateDateColumn","Entity","PrimaryGeneratedColumn","UpdateDateColumn","DigitalCredentialEntity","BaseEntity","id","parentId","documentType","regulationType","documentFormat","credentialRole","rawDocument","uniformDocument","credentialId","hash","kmsKeyRef","identifierMethod","issuerCorrelationType","subjectCorrelationType","rpCorrelationType","isIssuerSigned","issuerCorrelationId","subjectCorrelationId","rpCorrelationId","verifiedState","tenantId","linkedVpId","linkedVpFrom","linkedVpUntil","createdAt","presentedAt","lastUpdatedAt","validUntil","validFrom","verifiedAt","revokedAt","name","nullable","enum","DocumentType","RegulationType","CredentialDocumentFormat","CredentialRole","unique","CredentialCorrelationType","CredentialStateType","type","typeOrmDateTime","typeormDate","typeOrmDateTime","CredentialType","PartyCorrelationType","ActionType","InitiatorType","LoggingEventType","LogLevel","SubSystem","System","SystemCorrelationIdType","BaseEntity","Column","CreateDateColumn","Entity","PrimaryGeneratedColumn","UpdateDateColumn","AuditEventEntity","BaseEntity","id","timestamp","type","level","correlationId","system","subSystemType","actionType","actionSubType","initiatorType","systemCorrelationIdType","systemCorrelationId","systemAlias","partyCorrelationType","partyCorrelationId","partyAlias","description","credentialType","credentialHash","parentCredentialHash","originalCredential","sharePurpose","data","diagnosticData","createdAt","lastUpdatedAt","name","nullable","unique","typeOrmDateTime","enum","LoggingEventType","LogLevel","System","SubSystem","ActionType","InitiatorType","SystemCorrelationIdType","PartyCorrelationType","CredentialType","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","BaseEntity","Column","Entity","PrimaryGeneratedColumn","ImageDimensionsEntity","BaseEntity","id","width","height","name","nullable","unique","ImageAttributesEntity","BaseEntity","id","uri","dataUri","mediaType","alt","dimensions","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","ImageDimensionsEntity","cascade","onDelete","eager","BackgroundAttributesEntity","BaseEntity","id","color","image","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","ImageAttributesEntity","cascade","onDelete","eager","typeOrmDateTime","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","JoinColumn","OneToOne","PrimaryGeneratedColumn","TableInheritance","UpdateDateColumn","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","PrimaryGeneratedColumn","TextAttributesEntity","BaseEntity","id","color","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","BaseLocaleBrandingEntity","BaseEntity","id","alias","locale","logo","description","background","text","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","ImageAttributesEntity","cascade","onDelete","eager","BackgroundAttributesEntity","TextAttributesEntity","type","typeOrmDateTime","column","typeOrmDateTime","ArrayMinSize","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","OneToMany","PrimaryGeneratedColumn","UpdateDateColumn","ChildEntity","Column","Index","JoinColumn","ManyToOne","OneToMany","validate","Validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","Entity","Index","ManyToOne","PrimaryGeneratedColumn","CredentialClaimsEntity","BaseEntity","id","key","name","credentialLocaleBranding","validate","validation","length","Promise","reject","Error","Object","values","constraints","nullable","unique","message","CredentialLocaleBrandingEntity","claims","cascade","onDelete","CredentialLocaleBrandingEntity","BaseLocaleBrandingEntity","credentialBranding","claims","credentialBrandingId","CredentialBrandingEntity","localeBranding","onDelete","name","CredentialClaimsEntity","credentialLocaleBranding","cascade","eager","nullable","unique","CredentialBrandingEntity","BaseEntity","id","vcHash","issuerCorrelationId","localeBranding","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","CredentialLocaleBrandingEntity","credentialLocaleBrandingEntity","credentialBranding","cascade","onDelete","eager","type","typeOrmDateTime","typeOrmDateTime","ArrayMinSize","IsNotEmpty","validate","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","OneToMany","PrimaryGeneratedColumn","UpdateDateColumn","Validate","ChildEntity","Column","Index","JoinColumn","ManyToOne","IssuerLocaleBrandingEntity","BaseLocaleBrandingEntity","issuerBranding","clientUri","tosUri","policyUri","contacts","issuerBrandingId","IssuerBrandingEntity","localeBranding","onDelete","name","nullable","unique","message","IssuerBrandingEntity","BaseEntity","id","issuerCorrelationId","localeBranding","createdAt","lastUpdatedAt","updateUpdatedDate","Date","validate","validation","length","Promise","reject","Error","Object","values","constraints","name","nullable","unique","message","IssuerLocaleBrandingEntity","issuerLocaleBrandingEntity","issuerBranding","cascade","onDelete","eager","type","typeOrmDateTime","typeOrmDateTime","BaseEntity","Column","CreateDateColumn","Entity","PrimaryColumn","UpdateDateColumn","MachineStateInfoEntity","BaseEntity","instanceId","sessionId","machineName","latestStateName","latestEventType","state","createdAt","updatedAt","updatedCount","expiresAt","completedAt","tenantId","name","type","nullable","typeOrmDateTime","typeOrmDateTime","BaseEntity","Column","CreateDateColumn","Entity","PrimaryColumn","UpdateDateColumn","Oid4vcStateEntity","BaseEntity","id","lookups","stateId","correlationId","state","createdAt","updatedAt","expiresAt","tenantId","name","type","nullable","typeOrmDateTime","typeOrmDateTime","IsNotEmpty","BaseEntity","BeforeInsert","BeforeUpdate","Column","CreateDateColumn","Entity","Index","PrimaryGeneratedColumn","UpdateDateColumn","DcqlQueryItemEntity","BaseEntity","id","queryId","version","tenantId","purpose","name","query","createdAt","lastUpdatedAt","updateUpdatedDate","Date","length","type","nullable","unique","message","typeOrmDateTime","ChildEntity","Column","Validate","BaseEntity","Column","Entity","JoinColumn","ManyToOne","PrimaryColumn","TableInheritance","typeOrmDateTime","StatusListCredentialIdMode","StatusListDriverType","StatusListType","BaseEntity","ChildEntity","Column","Entity","OneToMany","PrimaryColumn","TableInheritance","Unique","StatusListEntity","BaseEntity","id","correlationId","length","type","issuer","driverType","credentialIdMode","proofFormat","statusListCredential","name","nullable","unique","enum","StatusListType","transformer","from","value","trim","startsWith","JSON","parse","to","stringify","StatusListDriverType","default","AGENT_TYPEORM","StatusListCredentialIdMode","ISSUANCE","column","StatusList2021Entity","indexingDirection","statusPurpose","statusListEntries","StatusListEntryEntity","entry","statusList","StatusList2021","OAuthStatusListEntity","bitsPerStatus","expiresAt","typeOrmDateTime","OAuthStatusList","BitstringStatusListEntity","validFrom","validUntil","ttl","includes","split","map","v","Array","isArray","join","BitstringStatusListEntryEntity","BitstringStatusList","StatusListEntryEntity","BaseEntity","statusListId","statusListIndex","statusList","credentialId","credentialHash","entryCorrelationId","value","name","type","nullable","unique","message","StatusList2021Entity","statusListEntries","length","column","BitstringStatusListEntryEntity","StatusListEntryEntity","statusPurpose","bitsPerStatus","statusMessage","statusReference","type","name","nullable","default","transformer","from","value","undefined","JSON","parse","to","stringify","startsWith","Array","isArray","AbstractContactStore","ConnectionType","CorrelationIdentifierType","PartyTypeType","Debug","In","replaceNullWithUndefined","obj","undefined","Date","Array","isArray","map","value","result","key","hasOwnProperty","partyEntityFrom","party","partyEntity","PartyEntity","uri","identities","map","identity","identityEntityFrom","electronicAddresses","electronicAddress","electronicAddressEntityFrom","physicalAddresses","physicalAddress","physicalAddressEntityFrom","partyType","partyTypeEntityFrom","contact","contactEntityFrom","ownerId","tenantId","partyFrom","result","id","roles","Set","flatMap","identityFrom","electronicAddressFrom","physicalAddressFrom","relationships","relationship","partyRelationshipFrom","partyTypeFrom","contactFrom","createdAt","lastUpdatedAt","replaceNullWithUndefined","isNaturalPerson","naturalPersonEntityFrom","isOrganization","organizationEntityFrom","Error","naturalPersonFrom","organizationFrom","connectionEntityFrom","connection","connectionEntity","ConnectionEntity","type","config","configEntityFrom","connectionFrom","configFrom","isOpenIdConfig","openIdConfigEntityFrom","isDidAuthConfig","didAuthConfigEntityFrom","correlationIdentifierEntityFrom","identifier","identifierEntity","CorrelationIdentifierEntity","correlationId","correlationIdentifierFrom","undefined","idOpts","did","method","didAuthConfig","DidAuthConfigEntity","redirectUrl","sessionId","electronicAddressEntity","ElectronicAddressEntity","physicalAddressEntity","PhysicalAddressEntity","streetName","streetNumber","postalCode","cityName","provinceName","countryCode","buildingName","entity","identityEntity","IdentityEntity","alias","origin","metadata","identityMetadataItemEntityFrom","filter","item","metadataItemFrom","metadataItemEntityFrom","EntityClass","label","value","metadataItemEntity","valueType","stringValue","numberValue","boolValue","Object","prototype","toString","call","slice","Date","dateValue","IdentityMetadataItemEntity","contactMetadataItemEntityFrom","ContactMetadataItemEntity","naturalPerson","naturalPersonEntity","NaturalPersonEntity","firstName","middleName","lastName","displayName","openIdConfig","OpenIdConfigEntity","clientId","clientSecret","scopes","issuer","dangerouslyAllowInsecureHttpRequests","clientAuthMethod","organization","organizationEntity","OrganizationEntity","legalName","partyRelationshipEntityFrom","partyRelationshipEntity","PartyRelationshipEntity","leftId","rightId","args","partyTypeEntity","PartyTypeEntity","name","description","openIdConfigFrom","didAuthConfigFrom","stateId","debug","Debug","ContactStore","AbstractContactStore","dbConnection","getParty","args","partyId","result","getRepository","PartyEntity","findOne","where","id","Promise","reject","Error","partyFrom","getParties","filter","partyRepository","filterConditions","buildFilters","initialResult","find","select","In","map","party","length","addParty","identities","contact","partyType","hasCorrectPartyType","type","identity","identifier","CorrelationIdentifierType","URL","connection","hasCorrectConnectionConfig","config","partyEntity","partyEntityFrom","createdResult","save","updateParty","updatedParty","relationships","electronicAddresses","updatedResult","transaction","removeParty","findOneById","then","deleteIdentities","deleteElectronicAddresses","deletePhysicalAddresses","physicalAddresses","delete","catch","error","partyContactRepository","BaseContactEntity","getIdentity","identityId","IdentityEntity","identityFrom","getIdentities","identityRepository","addIdentity","identityEntity","identityEntityFrom","updateIdentity","removeIdentity","addRelationship","leftId","rightId","assertRelationshipSides","relationship","partyRelationshipEntityFrom","PartyRelationshipEntity","partyRelationshipFrom","getRelationship","relationshipId","getRelationships","partyRelationshipRepository","partyRelationship","updateRelationship","removeRelationship","addPartyType","partyTypeEntityFrom","PartyTypeEntity","partyTypeFrom","getPartyType","partyTypeId","getPartyTypes","partyTypeRepository","updatePartyType","removePartyType","parties","getElectronicAddress","electronicAddressId","ElectronicAddressEntity","electronicAddressFrom","getElectronicAddresses","electronicAddressRepository","electronicAddress","addElectronicAddress","electronicAddressEntity","electronicAddressEntityFrom","updateElectronicAddress","removeElectronicAddress","getPhysicalAddress","physicalAddressId","PhysicalAddressEntity","physicalAddressFrom","getPhysicalAddresses","physicalAddressRepository","physicalAddress","addPhysicalAddress","physicalAddressEntity","physicalAddressEntityFrom","updatePhysicalAddress","removePhysicalAddress","ConnectionType","OPENID_CONNECT","isOpenIdConfig","SIOPv2","isDidAuthConfig","PartyTypeType","NATURAL_PERSON","isNaturalPerson","ORGANIZATION","isOrganization","correlationIdentifierRepository","CorrelationIdentifierEntity","baseConfigRepository","BaseConfigEntity","connectionRepository","ConnectionEntity","identityMetadataItemRepository","IdentityMetadataItemEntity","metadata","metadataItem","leftParty","rightParty","condition","processCondition","conditionObject","Object","keys","forEach","key","value","buildMetadataCondition","metadataCondition","label","stringValue","numberValue","boolValue","Date","dateValue","prototype","toString","call","slice","AbstractDigitalCredentialStore","CredentialStateType","CredentialRole","Debug","LessThanOrEqual","parseAndValidateOrderOptions","order","orderPairs","split","map","pair","trim","orderOptions","forEach","field","direction","dir","toUpperCase","Error","debug","Debug","DigitalCredentialStore","AbstractDigitalCredentialStore","dbConnection","dcRepo","addCredential","args","credentialEntity","nonPersistedDigitalCredentialEntityFromAddArgs","validationError","assertValidDigitalCredential","Promise","reject","getRepository","createdResult","save","resolve","digitalCredentialFrom","getCredential","result","findOne","where","Error","JSON","stringify","getCredentials","filter","offset","limit","order","sortOptions","parseAndValidateOrderOptions","processLinkedVpUntil","filterItem","processed","linkedVpUntil","LessThanOrEqual","whereClause","Array","isArray","length","map","Object","keys","total","findAndCount","skip","take","data","digitalCredentialsFrom","updateCredential","id","hash","credential","updates","fromEntries","entries","key","entityToSave","persistedDigitalCredentialEntityFromUpdateArgs","updatedResult","transaction","removeCredential","query","affected","deleteTree","error","console","findResult","findBy","dc","parentId","delete","undefined","DigitalCredentialEntity","updateCredentialState","credentialRepository","verifiedState","CredentialStateType","REVOKED","revokedAt","verifiedAt","persistedDigitalCredentialEntityFromStateArgs","kmsKeyRef","identifierMethod","credentialRole","isIssuerSigned","isRoleInvalid","CredentialRole","ISSUER","HOLDER","missingFields","push","fields","join","AbstractIssuanceBrandingStore","Debug","In","Not","credentialBrandingFrom","credentialBranding","result","localeBranding","map","localeBrandingFrom","replaceNullWithUndefined","issuerBrandingFrom","issuerBranding","locale","undefined","issuerLocaleBrandingEntityFrom","args","issuerLocaleBrandingEntity","IssuerLocaleBrandingEntity","alias","isEmptyString","logo","imageAttributesEntityFrom","description","background","backgroundAttributesEntityFrom","text","textAttributesEntityFrom","clientUri","tosUri","policyUri","contacts","backgroundAttributesEntity","BackgroundAttributesEntity","color","image","credentialBrandingEntityFrom","credentialBrandingEntity","CredentialBrandingEntity","issuerCorrelationId","vcHash","credentialLocaleBrandingEntityFrom","credentialLocaleBrandingEntity","CredentialLocaleBrandingEntity","claims","claim","credentialClaimsEntityFrom","imageAttributesEntity","ImageAttributesEntity","uri","dataUri","mediaType","alt","dimensions","imageDimensionsEntityFrom","imageDimensionsEntity","ImageDimensionsEntity","width","height","issuerBrandingEntityFrom","issuerBrandingEntity","IssuerBrandingEntity","textAttributesEntity","TextAttributesEntity","credentialClaimsEntity","CredentialClaimsEntity","key","name","debug","Debug","IssuanceBrandingStore","AbstractIssuanceBrandingStore","dbConnection","addCredentialBranding","args","localeBranding","vcHash","repository","getRepository","CredentialBrandingEntity","result","findOne","where","Promise","reject","Error","hasDuplicateLocales","credentialBrandingEntity","credentialBrandingEntityFrom","createdResult","save","credentialBrandingFrom","getCredentialBranding","filter","forEach","locale","undefined","find","map","credentialBranding","removeCredentialBranding","localeBrandingDeletions","removeLocaleBranding","all","credentialBrandingDeletions","delete","updateCredentialBranding","id","branding","transaction","addCredentialLocaleBranding","credentialBrandingId","credentialBrandingRepository","locales","CredentialLocaleBrandingEntity","In","length","credentialLocaleBrandingEntity","credentialLocaleBrandingRepository","credentialLocaleBrandingEntityFrom","getCredentialLocaleBranding","credentialBrandingLocale","credentialLocaleBranding","localeBrandingFrom","removeCredentialLocaleBranding","updateCredentialLocaleBranding","Not","updatedResult","addIssuerBranding","issuerCorrelationId","IssuerBrandingEntity","issuerBrandingEntity","issuerBrandingEntityFrom","issuerBrandingFrom","getIssuerBranding","issuerBranding","removeIssuerBranding","issuerBrandingDeletions","updateIssuerBranding","addIssuerLocaleBranding","issuerBrandingId","issuerBrandingRepository","IssuerLocaleBrandingEntity","issuerLocaleBrandingEntity","issuerLocaleBrandingRepository","issuerLocaleBrandingEntityFrom","getIssuerLocaleBranding","issuerLocaleBranding","removeIssuerLocaleBranding","updateIssuerLocaleBranding","seen","Set","some","size","add","background","image","dimensions","ImageDimensionsEntity","ImageAttributesEntity","BackgroundAttributesEntity","logo","text","TextAttributesEntity","StatusListType","Debug","In","StatusListType","statusListEntityFrom","args","type","StatusListType","StatusList2021","entity","StatusList2021Entity","sl2021","indexingDirection","statusPurpose","setBaseFields","Object","defineProperty","value","enumerable","configurable","OAuthStatusList","OAuthStatusListEntity","oauthSl","bitsPerStatus","expiresAt","BitstringStatusList","BitstringStatusListEntity","bitstringsl","Error","validFrom","validUntil","ttl","statusListFrom","result","getBaseFields","replaceNullWithUndefined","id","correlationId","length","issuer","driverType","credentialIdMode","proofFormat","statusListCredential","debug","Debug","StatusListStore","_dbConnection","dbConnection","availableStatusListEntries","args","statusListIndex","Array","isArray","statusList","getStatusList","id","statusListId","repo","getStatusListEntryRepo","type","results","find","where","In","map","index","filter","includes","addStatusListEntry","Error","save","updateStatusListEntry","result","getStatusListEntryByIndex","errorOnNotFound","updatedEntry","updStatusListId","updateResult","upsert","conflictPaths","statusListCorrelationId","entryCorrelationId","correlationId","findOne","relations","undefined","getStatusListEntryByCredentialId","credentialId","JSON","stringify","removeStatusListEntryByCredentialId","error","delete","affected","removeStatusListEntryByIndex","console","getStatusListEntries","getStatusListEntity","push","getStatusListRepo","entity","statusListFrom","getStatusLists","addStatusList","statusListEntityFrom","createdResult","updateStatusList","updatedResult","transaction","removeStatusList","deletedEntity","remove","Boolean","getDS","dataSource","StatusListType","StatusList2021","getRepository","StatusList2021Entity","OAuthStatusList","OAuthStatusListEntity","BitstringStatusList","BitstringStatusListEntity","StatusListEntity","BitstringStatusListEntryEntity","StatusListEntryEntity","AbstractEventLoggerStore","AbstractEventLoggerStore","LoggingEventType","Debug","LoggingEventType","auditEventFrom","event","result","id","type","LoggingEventType","AUDIT","description","timestamp","level","correlationId","actionType","actionSubType","initiatorType","partyAlias","partyCorrelationId","partyCorrelationType","subSystemType","system","systemAlias","systemCorrelationId","systemCorrelationIdType","data","JSON","parse","diagnosticData","replaceNullWithUndefined","auditEventEntityFrom","args","auditEventEntity","AuditEventEntity","stringify","activityEventFrom","ACTIVITY","credentialType","originalCredential","credentialHash","parentCredentialHash","sharePurpose","activityEventEntityFrom","activityEventEntity","debug","Debug","EventLoggerStore","AbstractEventLoggerStore","dbConnection","getAuditEvents","args","filter","auditEventsFilter","map","item","type","LoggingEventType","AUDIT","length","push","connection","result","getRepository","AuditEventEntity","find","where","event","auditEventFrom","storeAuditEvent","auditEventEntity","auditEventEntityFrom","createdResult","save","getActivityEvents","activityEventsFilter","ACTIVITY","activityEventFrom","storeActivityEvent","activityEventEntity","activityEventEntityFrom","IAbstractMachineStateStore","Debug","Brackets","IsNull","LessThan","Not","debug","Debug","MachineStateStore","IAbstractMachineStateStore","_dbConnection","dbConnection","persistMachineState","state","connection","machineName","instanceId","tenantId","entity","machineStateInfoEntityFrom","existing","getRepository","MachineStateInfoEntity","findOne","where","updatedCount","error","updatedAt","Date","console","log","Promise","reject","Error","result","save","transaction","machineInfoFrom","findActiveMachineStates","args","queryBuilder","createQueryBuilder","andWhere","Brackets","qb","orWhere","now","orderBy","getMany","then","entities","map","findMachineStates","find","filter","event","getMachineState","findOneOrFail","deleteMachineState","delete","affected","deleteExpiredMachineStates","deleteDoneStates","JSON","stringify","deleteCriteria","expiresAt","LessThan","completedAt","Not","IsNull","machineStateInfoEntity","parse","machineStateInfo","Object","assign","AbstractPDStore","Debug","In","blakepkg","DcqlQuery","dcqlQueryItemFrom","entity","result","id","tenantId","queryId","version","name","purpose","query","DcqlQuery","parse","JSON","createdAt","lastUpdatedAt","validate","replaceNullWithUndefined","dcqlQueryEntityItemFrom","item","DcqlQueryItemEntity","dcqlQuery","stringify","hashPayload","payload","blake2bHex","isPresentationDefinitionEqual","base","compare","debug","Debug","PDStore","AbstractPDStore","dbConnection","getDefinition","args","itemId","pdRepository","getRepository","DcqlQueryItemEntity","result","findOne","where","id","Promise","reject","Error","dcqlQueryItemFrom","hasDefinition","resultCount","count","hasDefinitions","filter","cleanFilter","getDefinitions","initialResult","findIds","find","In","map","entity","order","version","addDefinition","item","dcqlQueryEntityItemFrom","save","transaction","updateDefinition","updatedEntity","tenantId","queryId","name","purpose","query","JSON","stringify","updateResult","deleteDefinition","delete","deleteDefinitions","length","idFilters","f","undefined","cleanedItem","key","value","Debug","enablePostgresUuidExtension","CreateContacts1659463079428","name","up","queryRunner","enablePostgresUuidExtension","query","down","CreateContacts1659463069549","name","up","queryRunner","query","down","debug","Debug","CreateContacts1659463079429","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateContacts1659463079428","CreateContacts1659463069549","Promise","reject","down","Debug","CreatePresentationDefinitions1716475165345","name","up","queryRunner","query","down","CreatePresentationDefinitions1716475165344","name","up","queryRunner","query","down","debug","Debug","CreatePresentationDefinitions1716533767523","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreatePresentationDefinitions1716475165345","CreatePresentationDefinitions1716475165344","Promise","reject","down","Debug","enablePostgresUuidExtension","CreateIssuanceBranding1685628974232","name","up","queryRunner","enablePostgresUuidExtension","query","down","FixCredentialClaimsReferencesUuidPG1741895822987","name","up","queryRunner","query","down","CreateIssuanceBranding1685628973231","name","up","queryRunner","query","down","FixCredentialClaimsReferencesUuidSqlite1741895822987","name","up","queryRunner","query","down","debug","Debug","FixCredentialClaimsReferencesUuid1741895822987","name","up","queryRunner","dbType","connection","driver","options","type","mig","FixCredentialClaimsReferencesUuidPG1741895822987","FixCredentialClaimsReferencesUuidSqlite1741895822987","Promise","reject","down","CreateIssuanceBranding1685628974232","CreateIssuanceBranding1685628973231","Debug","AddBitstringStatusListEnumPG1741895823000","name","up","queryRunner","startTransaction","query","commitTransaction","down","CreateBitstringStatusListPG1741895823000","CreateBitstringStatusListSqlite1741895823001","name","up","queryRunner","query","down","debug","Debug","AddBitstringStatusListEnum1741895823000","name","up","queryRunner","dbType","connection","driver","options","type","mig","AddBitstringStatusListEnumPG1741895823000","Promise","reject","down","CreateBitstringStatusList1741895823000","CreateBitstringStatusListPG1741895823000","CreateBitstringStatusListSqlite1741895823001","Debug","CreateDcqlQueryItemPG1726588800000","name","up","queryRunner","query","down","CreateDcqlQueryItemSQlite1726617600000","name","up","queryRunner","query","down","debug","Debug","CreateDcqlQueryItem1726617600000","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateDcqlQueryItemPG1726588800000","CreateDcqlQueryItemSQlite1726617600000","Promise","reject","down","Debug","AddLinkedVpFields1763387280001","name","up","queryRunner","query","down","AddLinkedVpFields1763387280002","name","up","queryRunner","query","down","debug","Debug","AddLinkedVpFields1763387280000","name","up","queryRunner","dbType","connection","driver","options","type","mig","AddLinkedVpFields1763387280001","AddLinkedVpFields1763387280002","Promise","reject","down","Debug","debug","Debug","CreateIssuanceBranding1659463079429","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateIssuanceBranding1685628974232","CreateIssuanceBranding1685628973231","Promise","reject","down","Debug","enablePostgresUuidExtension","CreateContacts1690925872592","name","up","queryRunner","enablePostgresUuidExtension","query","down","CreateContacts1690925872693","name","up","queryRunner","query","down","debug","Debug","CreateContacts1690925872318","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateContacts1690925872592","CreateContacts1690925872693","Promise","reject","down","Debug","CreateStatusList1693866470001","name","up","queryRunner","query","down","UpdateStatusList1737110469001","name","up","queryRunner","query","down","CreateStatusList1693866470002","name","up","queryRunner","query","down","UpdateStatusList1737110469000","name","up","queryRunner","query","down","debug","Debug","CreateStatusList1693866470000","name","up","queryRunner","dbType","connection","driver","options","type","createMig","CreateStatusList1693866470001","updateMig","UpdateStatusList1737110469001","CreateStatusList1693866470002","UpdateStatusList1737110469000","Promise","reject","down","Debug","CreateAuditEvents1701634812183","name","up","queryRunner","query","down","CreateAuditEvents1701634819487","name","up","queryRunner","query","down","debug","Debug","CreateAuditEvents1701635835330","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateAuditEvents1701634812183","CreateAuditEvents1701634819487","Promise","reject","down","Debug","CreateDigitalCredential1708525189001","name","up","queryRunner","query","down","CreateDigitalCredential1708525189002","name","up","queryRunner","query","down","debug","Debug","CreateDigitalCredential1708525189000","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateDigitalCredential1708525189001","CreateDigitalCredential1708525189002","Promise","reject","down","Debug","CreateMachineStateStore1708797018115","name","up","queryRunner","query","down","CreateMachineStateStore1708796002272","name","up","queryRunner","query","down","debug","Debug","CreateMachineStateStore1708098041262","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateMachineStateStore1708797018115","CreateMachineStateStore1708796002272","Promise","reject","down","Debug","CreateContacts1710438363001","name","up","queryRunner","query","down","CreateContacts1710438363002","name","up","queryRunner","query","down","debug","Debug","CreateContacts1708525189000","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateContacts1710438363001","CreateContacts1710438363002","Promise","reject","down","Debug","CreateContacts1715761125001","name","up","queryRunner","query","down","CreateContacts1715761125002","name","up","queryRunner","query","down","debug","Debug","CreateContacts1715761125000","name","up","queryRunner","dbType","connection","driver","options","type","mig","CreateContacts1715761125001","CreateContacts1715761125002","Promise","reject","down","DataStoreContactMigrations","CreateContacts1659463079429","CreateContacts1690925872318","CreateContacts1708525189000","CreateContacts1715761125000","DataStoreIssuanceBrandingMigrations","CreateIssuanceBranding1659463079429","FixCredentialClaimsReferencesUuid1741895822987","DataStoreStatusListMigrations","CreateStatusList1693866470000","AddBitstringStatusListEnum1741895823000","CreateBitstringStatusList1741895823000","DataStoreEventLoggerMigrations","CreateAuditEvents1701635835330","DataStoreDigitalCredentialMigrations","CreateDigitalCredential1708525189000","AddLinkedVpFields1763387280000","DataStoreMachineStateMigrations","CreateMachineStateStore1708098041262","DataStorePresentationDefinitionMigrations","CreatePresentationDefinitions1716533767523","CreateDcqlQueryItem1726617600000","DataStoreMigrations","defaultHasher","CredentialDocumentFormat","CredentialStateType","DocumentType","RegulationType","CredentialMapper","DocumentFormat","ObjectUtils","computeEntryHash","determineDocumentType","raw","rawDocument","parseRawDocument","Error","hasProof","CredentialMapper","isCredential","isHex","ObjectUtils","isBase64","isPresentation","DocumentType","VC","C","VP","P","input","match","isJwtEncoded","isSdJwtEncoded","JSON","parse","e","determineCredentialDocumentFormat","documentFormat","DocumentFormat","JSONLD","CredentialDocumentFormat","JSON_LD","JWT","SD_JWT_VC","SD_JWT","MSO_MDOC","normalizeNullableFields","obj","nullableKeys","normalized","key","undefined","getValidUntil","uniformDocument","expirationDate","Date","validUntil","exp","getValidFrom","issuanceDate","validFrom","nbf","iat","safeStringify","object","stringify","nonPersistedDigitalCredentialEntityFromAddArgs","addCredentialArgs","documentType","detectDocumentType","hasher","opts","defaultHasher","toUniformCredential","toUniformPresentation","hash","computeEntryHash","regulationType","RegulationType","NON_REGULATED","createdAt","credentialId","id","lastUpdatedAt","persistedDigitalCredentialEntityFromUpdateArgs","existingCredential","updates","entity","DigitalCredentialEntity","Object","assign","normalizedUpdates","persistedDigitalCredentialEntityFromStateArgs","args","verifiedState","CredentialStateType","REVOKED","revokedAt","verifiedAt","digitalCredentialFrom","credentialEntity","result","replaceNullWithUndefined","digitalCredentialsFrom","credentialEntities","map","DataStoreContactEntities","BaseConfigEntity","ConnectionEntity","PartyEntity","IdentityEntity","IdentityMetadataItemEntity","CorrelationIdentifierEntity","DidAuthConfigEntity","OpenIdConfigEntity","PartyRelationshipEntity","PartyTypeEntity","BaseContactEntity","OrganizationEntity","NaturalPersonEntity","ElectronicAddressEntity","PhysicalAddressEntity","ContactMetadataItemEntity","DataStoreOid4vcStateEntities","Oid4vcStateEntity","DataStoreIssuanceBrandingEntities","BackgroundAttributesEntity","CredentialBrandingEntity","ImageAttributesEntity","ImageDimensionsEntity","BaseLocaleBrandingEntity","IssuerBrandingEntity","TextAttributesEntity","CredentialLocaleBrandingEntity","IssuerLocaleBrandingEntity","CredentialClaimsEntity","DataStorePresentationDefinitionEntities","DcqlQueryItemEntity","DataStoreStatusListEntities","StatusListEntity","StatusList2021Entity","OAuthStatusListEntity","BitstringStatusListEntity","BitstringStatusListEntryEntity","StatusListEntryEntity","DataStoreEventLoggerEntities","AuditEventEntity","DataStoreDigitalCredentialEntities","DigitalCredentialEntity","DataStoreMachineStateEntities","MachineStateInfoEntity","DataStoreEntities"]}